perm filename USERS.RLL[RDG,DBL]7 blob sn#625481 filedate 1981-11-15 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00033 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00004 00002	See all RLL.BBD[rdg,dbl].
C00005 00003	∂15 Oct 1980 1102-PDT	<CHT at SU-AI>	RLL 
C00006 00004	∂05-Nov-80  1342	SASTRY at USC-ISIF 	RLL applications    
C00008 00005		Contact with Keirsey@ECL
C00020 00006		UICC's interest
C00036 00007	∂ 2 Feb 1981 2205-PST	Student1	RLL-1
C00038 00008		Messages with Larry Hines - at UofTexas, Austin
C00052 00009		Messages with Steve Klein (ISI)
C00067 00010		(klein, con't)
C00074 00011		(klein, con't)
C00096 00012		(klein, con't)
C00125 00013		(klein, con't)
C00132 00014		(klein, con't - then p.17)
C00137 00015	∂TO CSD.SMITH@SCORE (CC SKLEIN@ISIB) 14:37 10-Aug
C00138 00016		(conversations with Steve Tappel)
C00140 00017		RLL Mini-Tutuorial - ca 3-7 August 1981 - Klein, Jonathan King, Greep
C00149 00018		Messages with Jonathan King - HP
C00151 00019		Messages with Steve Tepper (Greep) - Rand, Stanford
C00153 00020		Follow up conversations with Steve Klein (from 12-Aug-81 on)
C00162 00021		(klein, con't)
C00184 00022		(klein, con't)
C00219 00023	∂22-Sep-81  1613	Steve Klein <SKLEIN at USC-ISIB> 	smaller response to previous msg    
C00224 00024		(MANN at ISIB)
C00227 00025	∂TO SKLEIN@ISIB 10:06 28-Sept
C00241 00026	∂TO SKLEIN (CC MANN) 15:48 12-Oct
C00244 00027	∂TO SKLEIN 15:57 12-Oct
C00311 00028	∂19-Oct-81  1345	Steve Klein <SKLEIN at USC-ISIB> 	Reincarnation   
C00315 00029	∂TO SKLEIN 11:48 21-Oct
C00331 00030	∂ 1 Nov 1981 1241-PST	<GREINER>	Come and get it!
C00338 00031	∂06-Nov-81  1710	Steve Klein <SKLEIN at USC-ISIB> 	hmm...
C00344 00032	∂10 Nov 1981 1801-PST	<CSD.GREINER at SU-SCORE>	Macros, etc
C00357 00033	∂12-Nov-81  1515	Steve Klein <SKLEIN at USC-ISIB> 	oozing onwards  
C00362 ENDMK
C⊗;
See all RLL.BBD[rdg,dbl].
∂15 Oct 1980 1102-PDT	<CHT at SU-AI>	RLL 
To:   csd.greiner at SU-SCORE    


I've been trying to use RLL on SCORE and must not be getting the right files on the right directory; or perhaps I need a password? In any cae, if you could tell me how to get started, I'd really appreciate it. Sorry I didn't stop by yesterday for a 
demo. . .I decided I really wasn't clear enough yet on what I wanted to ask you. So
if you could just send instructions on starting, I'll take it from there for a 
while. Thanks Russ!
		Chris


∂05-Nov-80  1342	SASTRY at USC-ISIF 	RLL applications    
Date:  5 Nov 1980 1330-PST
From: SASTRY at USC-ISIF
Subject: RLL applications
To: greiner at SU-AI


Hi,

I obtained a copy of the paper describing RRL-1. Thankyou. Mentioned in it is 
a reference to some work on applications of RLL to VLSI layout. I am also 
interested in this although I have not done any real work along this path. 
What I would like to know is what problem is being looked at and what has 
been done. 
Could you send me any info concerning this or direct me as where I amy obtain 
such information ?. Thanks again.

Sarma Sastry. (Sastry@USC-ISIF)



-------

Mailed to SASTRY, STEFIK@PARC&HBOWN@SCORE/cc  16:49 5-Nov-80
VLSI/RLL interconnections
	Mark Stefik (STEFIK@PARC) and Harold Brown (CSD.HBROWN@SCORE) are 
currently building a system which will help plan and design VLSI layout.
(According to Mark, ISI's Danny Cohen knows all about it.)
	I sent them a copy of your message.
Russ

	Contact with Keirsey@ECL
∂13-Oct-80  1226	TOB  
To:   ROD, DLO, BIS, SL
Bruce
That's an excellent letter.  Thanks for the support.
Tom


 ∂13-Oct-80  0155	BULLOCK at USC-ECL 	SAIL/MACLISP image processing software  
Date: 13 OCT 1980 0154-PDT
From: BULLOCK at USC-ECL
Subject: SAIL/MACLISP image processing software
To:   Druffel at ISI
cc:   tob at SAIL, bullock

I have been talking to Tom Binford lately about getting a copy of the
MACLISP based software kernel that he has been developing for image
understanding work.  I mentioned to Tom that I would send you a
note letting you know of our interest in using some of the 
you have supported.

Put simply, our work has undergone a long process of evolution.  In 1973 our
first scene analysis software package was implemented in LISP 1.6 and was
used to support work on rule based control structures for scene analysis
for several years on an AFOSR grant.  With the change in funding policy
about that time to emphasize work more directly related to military 
applications, the main line of our activity shifted from general system
investigations to applied work on  problems like target cueing and image
based terminal navigation.  Although I built one system for texture
analysis in SAIL while I was at Stanford during this
period, most of the systems we built from then on were in FORTRAN.  The shift
to FORTRAN was more practical than scinentific and had to do with 
compatability with funder supported computers and better availability of
programmers.  Starting about two years ago there was a new move
towards systems that for  the first time were fairly
complex and some were even rule based (again!) at the control level.  This
new generation was enough to justify finally dumping FORTRAN and trying
a switch to another language.  For a number of resons, Pascal was
chosen.  Several systems, including one with a rule based interpreter,
were implemented on both the PDP-10 and on the VAX.   For a number of reasons,
some of the most important involving memory management and automatic
garbage collection, Pascal proved to be a poor implementation language both
for image analysis software and rule based systems.  This brings us up to
about the current point in time.  A number of other languages have been
evaluated.  For straight image processing one of the best seems to be "C".
The situation is now more complex however, because for the first time
we are planning the construction of systems that have a much greater
demand for rule based/kbs components.  For example, in the case of
smart weapons this is especially true.  Independently of our image based
work we have been using Interlisp for some KBS application studies
envolving EMYCIN and some systems of our own.  Both folklore and some
experiments of our own have shown that Interlisp is certainly
not the common denominator link between AI/KBS/and IU that one might hope
for.  At the same time as our experience with KBS systems such
as EMYCIN has increased and our application interests have become more
specialized and complex we have realized that we will probably have
to do alot of our own system crafting to get
what we really wnat.  Thus, except for some of the new tools like RLL,
there is no strong reason to stick with Interlisp if we are not going
to use a canned system
like EMYCIN.  

All of this finally brings us to Tom's system.  Here it looks like we
can build the type of complex image analysis system we need, with
compatability with rule based systems all in one environment.  The kernel
operations in his system will probably allow us to go off in our slightly
different direction of hybrid IU/KBS systems but with a good IU starting
point.  Also, unlike 1973 when we were apushing to
keep working in LISP 1.6 with little success, the mood has changed
significantly, as you are well aware.  I think we can make (and probably
will) arguments that because of the advancement in LISP implementations
that emphasize efficiency and hardware such as the
LISP machine movements and VHSIC technology that it is also "practical"
for us to consider a major reorientation and emphasis to LISP based
software.

So, to bring this long story to a close.  For the many
reasons outlined above, we are seriously interested in a LISP based
system for our future work.  At the same time Tom's system looks to
have excellent ppossibilities
for what we want.  The implementation looks to be one of the best, system-wise,
around and the results from his work based on the software are very impressive.
We have expressed our interest to Tom and look forward to acquiring the
parts of his system that would be needed for our work.  If such a transfer
is successful, I will keep you posted of our progress.  We will also
be happy to acknowledge the source of the kernel in terms of Tom, 
Stanford, and DARPA.

Bruce Bullock.
-------

∂10-Nov-80  1401	KEIRSEY at USC-ECL 	Details   
Date: 10 NOV 1980 1401-PST
From: KEIRSEY at USC-ECL
Subject: Details
To:   RDG at SAIL
cc:   keirsey

I have read your paper on the Details of RLL.  On the whole I thought
it was good.  Unfortunately, I had the naive notion that RLL-1 would be
simpler in conception and implementation.  As I read it, I got a feel
for how you represented some things, but it is clear to me that real
understanding of a particular knowledge base will only come through
use.  One important issue to me is how one can understand another
person's knowledge base (given that they are large).  Do you have any
thoughts on this?

I have a very detailed question.  On Diagram 1 of Details of RLL, what
is the significance of the AND-node notation (AnyConcreteThing&Unit,
AnySlot)?
-------

Mailed to Keirsey@ECL 17:37 11-Nov-80
Possible Answers
First, to answer the easy question:
In general the subclasses form a DAG, as opposed to a tree.
The "AND-notation" you asked about means that those particular subclasses
are disjoint.

As to your other inquiries:
You are correct in expecting the ideas of a rll to be simple.
The document you received described a particular implementation, slanted
towards things which I thought were relevant. Furthermore, many of the
details presented reflected facets which seemed
appropriate a while back; and which have not yet been updated to a better,
cleaner form.
Prof Genesereth, in writing up his description of MRS 
has stressed the simplity of its design. I recommend that paper
(HPP-80-24) to confirm the accuracy of your intuitions.

Yes, Prof Lenat & I have worried quite a bit about the question of how
to insure that each KB is understandable and unambiguous.
We considered using a predefined formal specification,
(such as predicate calculus),
and rejected these as too hard to understand, and not perspicious enough.
The sub-section 4.4 of the AAAI paper (on pages 167-168) describes another
approach - using a "Semantics" slot for each slot-unit, telling what this
slot "really" means.  The "Meta-Description & Modifiability" memo (HPP-80-18)
by Lenat & Genesereth, elaborates these ideas.

	If this doesn't answer your questions, let me know and I'll try again.
Russ
	UICC's interest
Mailed to THORPE@CMUA 13:58 31-Oct-80
U of I @ CC
Jack Mostow suggested you might be able to answer a question I have  about
the University  of Illinois  at Chicago  Circle.  Is  it on  any  computer
network?  In particular, is it on any of the networks which (you know  to)
include Stanford -  such as  the ARPAnet, or  SUMEX.  (I  checked out  the
ARPAnet, but could not find it there  - does it have perhaps some  cryptic
designator?)

Thank you.
	Russ Greiner

(I am trying to send a message to Prof Minkowycz and A. Sharma.)

∂31-Oct-80  1518	Charles.Thorpe at CMU-10A (C410CT60) 	Re: U of I @ CC  
Date: 31 October 1980 1750-EST (Friday)
From: Charles.Thorpe at CMU-10A (C410CT60)
To: Russell Greiner <RDG at SU-AI> 
Subject:  Re: U of I @ CC
In-Reply-To:  Russell Greiner's message of 31 Oct 80 16:58-EST
Message-Id: <31Oct80 175047 CT60@CMU-10A>

The only Chicago organization I could get to admit to having ARPAnet connections
was Argonne National Labs, and they're a long ways away from Circle campus.  I
don't know about the other nets.  Sorry I couldn't be of more help.
				Chuck Thorpe
PS--greet Jack for me.

Mailed to THORPE@CMUA 15:50 31-Oct
Thanks anyway. 
Do you know anything about the research Minkowycz et al are pursuing?
	Russ

∂01-Nov-80  1210	Charles.Thorpe at CMU-10A (C410CT60) 	Re: Thanks anyway.    
Date:  1 November 1980 1507-EST (Saturday)
From: Charles.Thorpe at CMU-10A (C410CT60)
To: Russell Greiner <RDG at SU-AI> 
Subject:  Re: Thanks anyway.
In-Reply-To:  Russell Greiner's message of 31 Oct 80 18:50-EST
Message-Id: <01Nov80 150726 CT60@CMU-10A>

Sorry, I don't know anything about Minkowycz.  My only dealings with the U of
Chicago were in trying to get an ARPA link to CMU; I never actually attended
there.
			Chuck

Mailed to THORPE@CMUA 13:13 1-Nov
OK
Oh, Jack wasn't sure what your affiliation with UofI@CC was.
	Russ

!Mailed (by Post Office) 3 November
							1 November 1980

Professor W.J. Minkowycz
Dr. A. Sharma
University of Illinois at Chicago Circle
College of Engineering
Box 4348
Chicago, Illinois  90980

Dear Sirs:

I am pleased to learn of your  interest in the RLL-1 system, as  expressed
in your letter  of 10 October.   I am sending,  under seperate cover,  the
memos you  (explicitly) requested,  together  with two  other  potentially
relevant ones.   The "Details  of RLL-1"  report includes  many  low-level
specifics of our current system.

While we  do plan  to  release RLL-1  eventually,  we are  cautious  about
releasing it too  soon.  Our reasons  stem from various  causes:  

(1) The particulars of the starting RLL-1 system (i.e the "bootstrap") are
still being hammered  out.  The  difficulties of  this design  are in  two
camps:  First we  want the system  to be as  unbiased as possible.   Given
that this starting system will necesarily employ some conventions we  want
to insure each such convention is "minimal" and necessary -- that is, they
should not  force you,  the  user, into  difficult situations  or  awkward
coding.  The neo-natal MRS (described in more detail below) is much closer
to realizing this goal that RLL-1 will ever be.

Secondly, RLL-1  should  come  equipped  with  enought  powerful,  general
constructs that the user can readily do a great many useful things, over a
wide range of tasks.  Bifucating  again, many of RLL-1 current  components
have not yet reached  the generality we  think possible, and  furthermore,
there are  many areas  which have  not even  been considered,  and so  the
modules capable of performing this type of task have not yet been built.

This is not surprising:   By design, RLL-1 is  a continuously growing  and
evolving system --  one capable of  adding on new  components as the  need
arises.  The concern here is the large number of known ommissions.

(2) Another major  problem is the  bugs which are  present in the  current
RLL-1 system.  We feel it will take  about a month to correct the ones  we
now know about.

(3) The other major issue stems from research directions.  Prof Lenat  and
I developed RLL-1 as a tool, to be used to build the EURISKO system.  [See
Appendix B.2  for an  overview  of RLL-1's  role  as foundation  for  this
system.  There were  two major  reasons why  we encouraged  others to  use
RLL-1:  First, these other applications will  push on the set of  features
RLL-1 will have to  provide; the modules built  to handle such  situations
will expand RLL-1's  capabilites, making it  a more general  tool for  our
uses  as  well.   Second,   RLL-1  will  provide   a  Lingua  Franca   for
EURISKO-related knowledge  bases.  To  function, the  EURISKO system  must
first include a large collection of diverse knowledge bases.  Rather  than
inputing these ourselves,  we would rather  develope a symbiotic  relation
with other  researchers  -- they  will  be given  the  underlying  EURISKO
system, as a  particular representational/control scheme  for their  data,
and in exchange, we  get to peak over  their shoulders, and collect  their
set of heuristics.  As  such, it is strongly  in our interest to  continue
supporting EURISKO.  We have further decided to support/improve RLL-1 only
where such modifications are  crucial to its  application to this  primary
line of research  -- which  is concerned  more with  heuristics than  with
representations, per se.

The research ideas of a  representation language language are still  being
pursued here at Stanford, by Professor Micheal Genesereth and David Smith.
They are now  developing the  MRS (for  Modifiable Representation  System)
mentioned above.  They  have guaranteed continued  support of its  kernel,
and intend to soon develop a full user community, in which implementations
of diverse  representational  systems  can  be  coopertively  constructed,
collected and dispersed.  After  the (both conceptual and  implementation)
bugs have been  purged from  both of  our respective  systems, RLL-1  will
actually be encoded in MRS.  At this point RLL-1 will be (viewable as) one
of many "plug-in" modules, which "twiddles" that copy of MRS into a system
which follows a particular set of conventions.

With these caveats in mind, here are the options for using RLL-1, as I see
them:

(1) We could export to you the RLL-1  system, as it is now.  We would,  of
course, make no commitment  to support this  pre-release version.  It  is,
however, thoroughly  documented, and  does  do a  great number  of  things
correctly.

(2) In about another month (after removing those major known bugs) we plan
to freeze the then-existent system.  This system will be fairly static  --
the only updates will be repairs to bugs subsequently found, as opposed to
extensions.  Note that we will fix  just those problems which seem to  lie
on our critical path.

(3) The EURISKO network is just starting  up -- within a few months  after
getting a working version of RLL-1, we feel it will be distributable.   If
your task area is conducive to a EURISKO type of exploration, you will  be
welcome to use that system.  Recall that this network, which will be built
on top of RLL-1, will continue to be supported from here.

(4) If you wish to pursue  representation issues, qua research topic,  you
may wish to join the growing RLL-1/MRS community.  "Good citizens" of this
group are  expected to  contribute both  ideas and  code to  an  evolving,
improving system.

Let me know which  of these options seems  most appropriate -- or  perhaps
you can envision another possibility.

I have a quick list of remaining issues/questions:

1. Your letter refered to a  description of your task.  Could you  perhaps
send me another copy of this article, as I never found it.

2. Is UofI@CC on  any computer network which  also includes Stanford?   Do
you know of any (even indirect) electronic path from there to here?  I can
be reached  at RDG@SU-AI,  CSD.GREINER@SCORE  or GREINER@SUMEX;  and  much
prefer this faster communication to the slower postal mail.

3. I am enclosing  a copy of  the first (and only)  message posted on  the
(Virtual) RLL Bulletin Board.   If you wish, I  will see that you  receive
further messages  as  well.  (Note  this  bulletin board  is  intended  to
discuss  theoretical  issues  of  representation  language  langauges,  as
opposed  to   our  implementation,   RLL-1,   per  se.    Notications   of
updates/modifications/bugs/etc to RLL-1 will appear elsewhere.)

4. RLL-1, as it  now stands, does require  InterLisp.  MRS, however,  will
have parallel implementations  in both InterLisp  and MacLisp.  Thus  once
RLL-1 has been written in MRS it will be MacLisp compatible.

This has  been  the  first  formal request  for  RLL-1,  from  outside  of
Stanford.  As such the policies  concerning how to distribute this  system
are quite  flexible.   If  you  have any  suggestions  on  how  we  should
facilitate releasing our system, please let me know.  Please let me  know,
also, if there is any way I may be of further help with your project.

				Sincerely,




				Russell Greiner
				Computer Science Department
				Stanford University
				Stanford, CA 94305

CC: Professor Douglas B.  Lenat, Professor Micheal  R Genesereth, David  E
Smith

!∂02-Nov-80  2014	CSD.LENAT at SU-SCORE 	Re: Comments before I mail this off?      
Date:  2 Nov 1980 2011-PST
From: CSD.LENAT at SU-SCORE
Subject: Re: Comments before I mail this off?  
To: RDG at SU-AI
In-Reply-To: Your message of 1-Nov-80 1437-PST


An ecellent answer; much bette than I'm sure they're expecting.  Thanks.
Doug
-------

!∂05-Nov-80  1020	CSD.SMITH at SU-SCORE 	Re: FYI     
Date:  5 Nov 1980 1017-PST
From: CSD.SMITH at SU-SCORE
Subject: Re: FYI 
To: RDG at SU-AI
In-Reply-To: Your message of 4-Nov-80 1806-PST

You should probably ask Ed or Bruce about distribution.  I think that Stanford
requires that a copyright notice go out with the software, and may also require
that a liability release form be signed.
-------

∂ 2 Feb 1981 2205-PST	Student1	RLL-1
To:   GREINER


    I have just finished your "working paper" on RLL-1 and would be interested
in learning more about it and, perhaps, experimenting with it as it may be
applied to a project on which I am working. Briefly, I am building a Neuro-
anatomy/Anatomy knowledge base which I hope to be able to use as a reference
for the INTERNIST programs as well as for the basis of a Neurological Dia-
gnosis and teaching package. The relational aspects of functional neuro-
anatomy and the limitations of the current system (which utilizes a series
of related hashfiles), have prompted me to look to see how others have
tackled the problems of knowledge base management. To this end, I have
already contacted Mark Stefik about the UNITS package, and while exploring
that area, I came across your paper. If you could direct me to sources
of additional information on RLL-1 I would greatly appreciate it. I would
also, of course, be interested in current applications of RLL-1 some of
which you mentioned in the paper.

Thanks for your time.

Sean McLinden
<STUDENT1>@SUMEX-AIM
	Messages with Larry Hines - at UofTexas, Austin
∂06-Apr-81  1939	ATP.HINES at UTEXAS-20 	RLL and theorem proving   
To: RDG at SU-AI
cc: CSD.LENAT at SU-SCORE


I think that I have finally develop a theorem prover system which will benefit
from being implemented in RLL.  However, only a small kernal of the 
knowledge base's templates have been created.  Other frame types have suggested
themselves and, doubtlessly, eventually even more types will be necessary.

I apologize for having to reask this, but I would like to be able to 
<make>
all frames, not marked as permanent, to disappear upon the end of a 
session.  

Anyway, since I have now finally learned a way to use RLL, I would like
to obtain a copy of it.  I am addressable through the APRANET as
ATP.HINES@UTEXAS20 or at least I been told that I am.

larry hines
-------

!∂Mailed to ATP.HINES@UTEXAS-20 (CC DBL) 14:07 13-Apr
Answers, sorta
Larry -
Good to hear from you again.  I hope all is well over in Texas.

To answer your questions:
There are several ways to deal with "ephemeral" units, each with its own
set of complications. 

	Solution 1
Every unit which descends from AnyEphemeral will be wasted at
the end of each session.  This is the method I have used for handling such
temporary entities, as it is the safest and most effective.

These wins are not free, though.  As you might imagine, closing and writing the
networks will be expensive in time.  Furthermore, as these entities are
full-fledged units, creating and initializing each may well take longer
than you'd like.  A speed up of, maybe, a factor of 4 or 5 will come about
by judicious use of macros, but there is simply so much work which has to
take place...

	Solution 2
You could avoid much of the time-to-close-the-KBs expense by storing
all ephemerons in some garbage KB, which is simply CANCELled at the end of
each session, rather than WRITEten.  The problem here is the plethora
of un-updated back-pointers.  (IE other units may still point to a now
destroyed temporary unit, causing grief in many situations.)  Still, if
you could tolerate this, this solution will be the fastest, and least
cautious.

	Solution 3a.
Of course, this is not unsolvable:  If you knew which slots might so connect
temporary with permanent units, you could instruct each such slot to
record each connection made; and then quickly map thru these when ending
a session, removing the soon-to-be-offending links.

This will be time-consuming, both during PUTs and when closing things, but
potentially faster than the time loss implied in Soln 1.

	Solution 3b
Yet another infinitely-conservative possibility, (along the lines suggested
by Soln 2 above) would be to spend
some time at the start of each session, to remove all offensive links from
the existing units.

----
The decision of which of these is most desirable is where it belongs: in
lap of the user.  You the user get to consider what requirements your
task will impose of your system, and build the system accordingly --
ie if you can stand some slop, but prefer your program to be fast,
solution 2 may be best.  On the other hand, you may have some idea for
some intermediary system, incorporating some combination of, say 1 and 2
above.  Great - as soon as you implement it, it'll be incorporated into RLL
for the next user.

Final note: realize you're not fighting RLL here -- only the specifications
of your task.  To permit such flexibility.
RLL never commits itself with respect to temporary units.

-----
Next issue: How to get you on RLL.  This is tricky; as RLL is still 
(to be kind) buggy.  I would have no objection to mailing you a copy
(or actually, permitting you to FTP it), but realize there are many things
which will not work, and there are many remaining holes.

Let me what I can do for you.
	Russ

PS I've sent you (ATP.HINES@UTEXAX) several messages, earlier in the year.
(About your SCORE account, and the RLL bulletin board, ...)
Did any other them get thru?

!∂16-Apr-81  0131	ATP.HINES at UTEXAS-20 	Getting RLL,etc.

Greetings Russ,
   All is well.  At least as far as I can tell, it is.

   It's the same with you, I hope.

   Thanks for the advice on "ephemeral" units.  My initial guess is that
solution 2 (i.e. garbage KB) is what I'll use; although, AnyEphemeral units
will probably be required, too.

   I don't have a major preference as to which way (FTPing or mailing)
RLL uses to get here.  If I FTPed RLL it is likely that I would get it
sooner and be easiest on you.  I was wondering how much space RLL takes.  

   About your messages to me in Sept., I did get them all (I think) albeit
belately.  If the RLL bboard is still active, I would like to be on it, if 
that is possible.

   By the way, say hi to the bozos from the texas boy.
		
						-- larry

!∂Mailed to Hines (CC DBL, DE2)  15:51 24-Apr
Undaunted, into the fray
Glad to see you're still interested.  The current version of RLL is now on
Rand-AI's machine.  (One fringe benefit of consulting there was unlimited
access to that marvelously unloaded machine.)

As usual, RLL is a mere epsilon increment away from respectibility, and
hence releasability.  (I'm now twiddling with MACROs, which, I hope, will
speed up its operations a good order of magnitude.)

Its outward appearance hasn't changed much since last summer; that's
pretty much by conscious design.  It has absorbed a fair number of modules
-- mostly concerned with EURISKO, and encoding information about LISP
functions.

Space...
First, RLL is dependent on CORLL, which takes up a fair amount of space.
You may wish to store a CORLL sysout on some public directory -- not only
does this permit others to use this reasonably well documented, (and
possibly useful) tool, but it also spares you from absorbing the cost of
this disk space.  Anyway, this will consume about 300-400 pages.

Now for RLL:  There are currently several essential KBs, each of which
contains a *.KB file, plus an optional *.. and *.COM pair of files for the
associated LISP functions.  Just in static storage requirements, these
will cost about 600 pages.  Your dynamic storage should be almost this
much again, for the *.PAGE temporary files.  (Note you may not have to
worry about this... In fact, there are only a few cases when it makes any
differences: 
(1) if you're system is as stingy as SCORE, which does not permit you any
storage over your allocation, even for an instant; or (2) if you want to
preserve your state using a SYSOUT, in which case you'll have to store
these "temporary files" from one day to the next.  In the latter case you 
will need not only the 4 to 5 hundred pages for the PAGE files, but an 
additional 300 pages for the actual sysout as well.

The figures above refer only to the nucleus required for RLL to run.  You
may, in addition, want to utilize other existant KBs -- and of course this
will cost you space.  Of course, you will be creating your own "theorem
proving" KBs as well.  I have no real idea how much space this will
require -- except to say that whatever you estimate now, I can state from
experience, will not be enough.

Politics and Policies ...  
I've got no objections to handing over RLL, as it stands now.  There are
some caveats:  As I've mentioned before, it's got its share of bugs and
problems; and I've no yen to fix them twice.  Which leads to problems: who
will maintain your version?  How should I communicate the errors and fixes
found?  Perhaps I could periodically mail over new versions of the nuclear
files -- but that would force you to reconnect the units of your nascent
KBs to these time and again.  That may just amount to running the
"reconnecting" code each time - which is easy to do, if time consuming.

Of course that may not work.  There is a mechanism for sending along
single now-fixed units... maybe that's what I should do?  Comments?  (Now
is a good time for me to resolve this issue, as I've been promising to
release this system for months now...)

The other issue is Stanford.  Nobody here minds releasing the software;
but there seems some worry that you might make a buck on it, and not give
Stanford its share.  Sooo, I got a little form I have to have you fill
out.

Comments, critiques, indications of disgust?
	Russ

!∂01-May-81  1743	ATP.HINES at UTEXAS-20 	daunted, into the fray    

Gee, the fray is big.  

Well it seems that at the present time finding the space that RLL needs is 
not going to happen.  At least until out system is augmented by a couple more
disk packs (about four months + delivery delay time from now), I am not going
have a home for RLL.

Gee, even the best laid plans ... .

As I'm sure you know, Doug Lenat will be here Monday so I'll speak to
him on this.  

larry
-------

	Messages with Steve Klein (ISI)
∂14 Oct 1980 1323-PDT	Steve Klein <SKLEIN at USC-ISIB>	Re: minor details...
To: CSD.GREINER at SU-SCORE

Hmm...replies 12 levels deep seem to lose the flavor of their contents.  wrt
manual 1 vs manual 2, we would like to attempt "hands-on" type experience--
have you set up some mechanism for this?  That is, distribution of the system
or use there or ?? (is this info included in your documentation?).  If not too
late, I'd like to request two sets of the manuals--I'm trying to shove things 
at several people...
Steve.
-------
∂14 Oct 1980 1547-PDT	CSD.GREINER	Re: minor details...
To: SKLEIN at USC-ISIB
cc: csd.greiner

RLL-1 is fairly close to being distributable.  I've not released it yet as it
is still strewn with bugs and inconsistencies.  There is also some legal hassles
to be resolved - forms to sign and the like.
In the long term, the MRS system, by Genesereth & Smith, will be the official
bona fide Representation Language Language -- Mike claims it will be available,
sans bells and whistles (i.e. lacking any useful facility) some time in the next
few weeks. RLL-1 will thenafter be encoded in this system, for compatability
and transportability.
	I'll try to get you two sets of the manuals. Ask again if you don't
get both sets.
	God bless, and too-da-loo,
Russ
-------
∂22 Oct 1980 1509-PDT	Steve Klein <SKLEIN at USC-ISIB>	I see a ship on the horizon...
To: CSD⊗.Greiner at SU-SCORE

Hi.  Do you know which address got used for mailing the memos out?  Nothing
seems to have shown up here yet.
Steve.
-------
∂23 Oct 1980 2030-PDT	CSD.GREINER	Re: I see a ship on the horizon...
To: SKLEIN at USC-ISIB, CSD⊗.Greiner
In-Reply-To: Your message of 22-Oct-80 1509-PDT

Turns out only 25 memos have been sent out so far.  The rest (including,
apparently yours) will be sent soon (after the next batch come back from the
printer...)
	Russ
-------
∂28 Oct 1980 1407-PST	Steve Klein <SKLEIN at USC-ISIB>	paper snow
To: CSD⊗.Greiner at SU-SCORE

Hi.  Sorry for the bother, but the RLL-1 paper arrived yesterday, without
the "Details..." paper.  Could this be due to paper snarl/printing details,
or am I being over-anxious?
wit regardlets,
Steve.
-------
∂TO SKLEIN@USC-ISIB 14:05 3-Nov
Tap tap tap <yawn> tap tap tap ...
Steve - have they arrived yet?  (By now they REALLY should have...)
Also, if its not too much bother, please send comments to RDG@SAIL.
Anything interesting happening there?
	Russ

∂04-Nov-80  1324	Steve Klein <SKLEIN at USC-ISIB> 	Re: Tap tap tap <yawn> tap tap tap ...   
To: RDG at SU-AI

greetzings.  I haven't seen the innards paper yet...murphy's  law or the US 
mail has achieved self-awareness and is practicing selectivity.  Everything
here is mostly mundane...I wonder what the secret is to getting more done in
less time  (if you find out, maybe we could bottle it).  If Reagan wins I might
move to New Zealand--have you considered what you will do?
A foobar cocktail in your general direction.
Steve.
-------

∂07-Nov-80  2114	Steve Klein <SKLEIN at USC-ISIB> 	pretty pictures 
To: RDG at SU-AI

Howdy...just a quick note:  I got the memos yesterday. Thankks.
Onwards.
Steve.
-------

∂05-Nov-80  1051	PRESSBURGER at SCI-ICS   
To: rdg at su-ai

Date: Tuesday, 4 November 1980  15:29-PST
From: Steve Klein <SKLEIN at USC-ISIB>
To:   PRESSBURGER at SCI-ICS
Re:   delta

How does an elephant dance?  Music experiments from the point of an
expected sound or just manipulating the equipment...tape decks and loops
are notoriously limited in flexibility...the world needs some decent
computer based composition systems...sounds like a reasonable life/business/
phd thesis.  The notion of "knowing" what defines a proof, what a proof
entails, and the underlying knowledge that supports the notion of proof
seems one of the hairier issues I've seen in a while, although I seem to
recall that a major part of (some) philosophical garbage deals with this
in a very ad hoc manner...I haven't read any of Lenats new stuff, so can't
comment on its limitations.   Did you see any of the interviews with
"people on the street" last night?  Goddamn parrots...is everyone in the
world so stupid that they believe the stuff they see on TV?  If I hear one
more person say that "its time for a change" I'll amputate them at the knee.
I hope you kept your senses and didn't vote for Anderson.  The "video
revolution"  hopefully is the start of the downfall of our current way of
voting...when anyone can watch what goes on in congress there isn't as much
that you can get away with...not an exclusive club anymore.  Voting as
it now stands (pick one of 2/3/...) bears the same relation to expressing 
your opinion as X'ing a contract does to understanding it...ten years from
now we may see something different...unfortunately, the media stranglehold
may be even worse--the only bright spot is that current trends are away 
from centralized control.

There are some great cassette decks available for cheap now.  I bought my
parents a Technics one with solenoid controls, fluorescent peakreading meters,
less wow&flutter than my old Sony, metal tape capability, etc. for $260.
There are an amazing number of decks for $150-300 that are great (need to
use metal tape though to get around lower speed...not very cheap, although
compatible with reel-to-reel tape costs).  Sendust heads are reasonable, as
are ferrite...don't know that anyone has really pointed out real differences
in end recording quality...just have to stay away from normal permalloy heads.
45 minutes per side is still a problem, but I'd rather flip cassettes at that
rate than reels at ANY other rate.
Barry actually found that "treasure"--a copper plate under the Colorado St.
Bridge...got $100. from the place having the contest...really stupid set
of clues from an overall point of view (the idiot also made several mistakes).
Sandy is looking in earnest for a place to go back to school...police dept
really getting to her, however, I'm most likely going to stay around here for
the next year or two...interesting contest between too many options and not
wanting to do anything.   
Looks like both goodies I'm working on here may potentially end up in RLL/MRS.
Our hardware representation stuff is evolving into general VLSI design (I
think I mentioned that at some point previously)...most of the mechanisms
needed to do this are also common to all engineering design projects--
interesting to see what generalities could result...as I think I also mentioned
previously, one part of this looks just like a part of an automated
programming system or heuristic-based compiler...I'd like to get your 
opinions at some point on how you think the world should be organized.
The other stuff will probably be my masters thesis...a computational
framework for systemic grammars (the linguistic underpinnings of SHRDLU,
among other things, if you haven't seen anything on them). For the 
multi-paragraph English text generation stuff. End result will hopefully 
be nicely enough done that it can be turned on anything in the RLL system
(with appropriate concept-to-English expression mappings). Such grandiose
plans, sigh.
Steve.

∂Mailed to SKLEIN at USC-ISIB  18:13 9-March
... and you were about to give up ...
Steve -
Rejoice, rejoice, rejoice!  The MRS manual has gone to press, errors and
all.  All 35 pages will be mailed to you when it becomes available.

If you like I'll carry a copy thence 18-March.
I've a now-more-official-than-last-time-invitation to arrange to consult
at Rand, scheduled for 19-20 March.  Would you like to get together sometime
around then?

Russ

∂09-Mar-81  1822	Steve Klein <SKLEIN at USC-ISIB> 	Re: ... and you were about to give up ...     

Truly amazing...if you brought down a copy I wouldn't complain.  Doing 
something/whatever sounds reasonable if it doesn't conflict with your (any)
plans.  I don't think I have any problems in that respect.  I'll check and
get back to you.
Steve.
-------

∂30-Mar-81  1831	Steve Klein <SKLEIN at USC-ISIB> 	..oops..   
To: RDG at SU-AI

I seem to have misplaced the fact that you were coming this-a-way.  Oh, well...
how was you trip/consulting experience (assuming it occured)?  What's new
up your way...anyone you know poke holes in our "illustrious leader"? 
Steve.
-------

∂Mailed to SKEIN@USC-ISIB  14:30 31-Mar
Yak, Yak, Yak
The trip was good, if tiring.
The stuff at Rand looks financially rewarding, but not (yet) intellectually
stimulating.  I saw Fay and Bonnie whilst there, as well as 4/5 of my nuclear
family (yawn).

So how's by you?  You'll be overjoyed to know that at this very moment
(yes, right now!) your personal (almost autographed) 
copy of the MRS manual is meandering its way to your clutches --
really!
I was waiting for Mike to mail you a copy; and he assumed I was playing
postman.  Anyway, enjoy. (It's not all that interesting, but you'll find
that out soon enough...)
	Russ
	(klein, con't)
∂06-Apr-81  1612	Steve Klein <SKLEIN at USC-ISIB> 	Re: Yak, Yak, Yak    

<<<< ∂Mailed to Steve (CC Mike)  11:14 8-Apr >>>>
Answers, such as they are
Hi.  Sorry about the delay.  I got the paper the day after your message.
Thanks.  It is rather sparse stuff.  Have any of you written down a "game plan"
of any sorts?  The following (for example) are of most interest:

*****
Game plan:  Mike has a vast list of things he hopes MRS will be able to do,
one day.  Included are such diverse elements as {fear, surprise, ruthless
efficient and an...} preservations of invariants, proliferation of demons,
graceful agenda-driven process-interruption and -resumption, ...  Ask him
for the full list. (He, of course, wouldn't give it to you, but you can
at least annoy him with another reasonable request...)
*****


  > The relation between RLL and MRS, both short and long term

*****
RLL vs MRS:  Currently these are two distinct systems, each sitting on the
same CORLL foundation.  That's the way tey'll stay in the short term; eventually
I/we hope to find some slave labor to incorporate RLL into MRS, by making
an RLL-initializing module, which can be plugged into MRS's core.  (Volunteers?..)

For what it's worth, some Xerox people (led by your hero and mine, Mark Stefik
[isn't it annoying how many mono-syllabic, quadra-epistle male moniker there
are -- and they (we?) all seem working on this silly set of projects. Any, back
to the plot:]) began with MRS, but grew dissatisfied; with its code itself,
as best I can tell.  So begot LRS (for Little Representation System; cutely
sandwiched between Krs and Mrs, alphabetically.)  And so much for our maxim,
of halting the proliferation of similar but incompatible ...
*****

  > RLL/MRS's place in the structure of things at Stanford (support, interest,
       again long term expectations)

*****
Place in the sun: as long as either Lenat (hereafter DBL) or I am around there
will probably be continued interest in RLL;
ditto for MRG (an alias of Mike Genesereth) with respect to MRS.
As MRG has suckered slews of naive personel into using MRS, it will probably
even be supported for a while, whatever that means.  The Rand stuff will
keep me honest, wrt RLL.
DBL is currently EURISKOing in virgin LISP, by the way.  Eventually he hopes
to do the stuff in RLL, but thus far has found its time requirements too
stringent...
*****

  > Status of RLL examples (Hearsay-type, KLONE, etc.)--someone doing 
     something, waiting for volunteers, etc.

*****
<This answer is as sparse as the work done, except for meta-comments,
(and, of course, that last Meta-Meta-Comment [whoops, and that last
Meta-Meta-Meta-Comment {not to mention the preceding ....}]).>

I left the above part in to be cute - but actually I have found the need to
build up features of the Units package -- esp its inheritance (SPECS) relation,
of gradual refinement.
*****

  > Any urges to build general "real-world" type knowledge bases/rep-
     resentations (time {gak}, spatial location, events, general taxonomies)

*****
In EURISKO's eventualities, (or at least in DBL's conception of it,)
vast amounts of common sense will be available to this over system;
and this body of facts, heuristics, ... will grow daily, due to both 
input from various users, and EURISKO's introspective capabilities.

A paper I started to write an IJCAI paper a while back,
"spontaneously aborted" itself when it became apparent the poor
thing lacked anything which did more than resemble semantic content.
Its intent was to discuss EURISKO itself, and these issues, perhaps.
Anyway DBL and I may one day massage it into a reasonable shape.
If so I'll be able to suitable answer that question with a pointer to that
piece of paper.
*****

  > Mailing list / users group status

*****
I'm not sure what you want here.  Yes, there is a degenerate mailing list,
consisting of people I feel should get this sort of stuff, including you,
Tom, and Rick H-R.  Nobody from outside has contributed, yet.
*****

If you guys haven't formulated such "positions" yet, feel free to ignore.
We are finally getting down to a particular representation for the knowledge
delivery / text generation project (generally KLONE-like) and it would be
truly wasteful to generate another hack system (especially when a specific
goal is exportability).  Enjoy.
Steve.
-------

	(klein, con't)
∂21-Apr-81  1732	Steve Klein <SKLEIN at USC-ISIB> 	Sunshine and Light   
To: RDG at SU-AI

Somehow, MM asking (demanding) that I title everything is ridiculous (hmm...
I've never seen whether the Subject field goes away if blank...probably not).
Anywho, in the process of "selling" RLL to the powers-that-be the need that
emerges is for more toys to show.  What could I actually get my hands on
(*.exe, KB's, other unit descriptions, demos, random prose, ...), with what
restrictions?  We have an immediate need for something which shows handling of
events and event sequences (presumably the chemical spill type goodies, if
they still exist).  The gospel seems to be potent...no one has complained yet.
Have you written your anti-reagan letter for the day?
Steve.
-------

 ∂Mailed to SKLEIN  16:02 22-Apr
Thunderclods and Darkness
Hmm - to answer the easy question: yes, MM does NOT force you to en-subject
your messages.  Now for the hard stuff:

I'm elated the "word according to the prophet Steve" is so catchy.
I'm not quite sure how to go from here; what would best further RLL's cause.
The code still has bugs in it -- so what else is new?  
Its external appearance hasn't changed much
over the last n months -- unless you pull out your stop watch and observe
it cruising along at many times the speed it once had.
(That is, the amount of speed has increased; not the time spent for
a given task.)

My next step will further speed up the system -- making several functions
(like GetValue) macros; so the compiled code will be able to avoid dozens
of costly queries.
After that I'll code up a Units-like SPEC relation (gradual refinement),
which seems essential for a wide variety of tasks.  (Not only for the
SPILL stuff, but also for Rand's planner system; and from your description,
for your stuff as well.)

Let me ask this: does ISI have some (competent) manpower (well, person power)
which could be contributed towards the greater good of ...
There are a host of simple-ish chores which just take someone to sit
down and do it; and I've been unable to get any of the BS or MS students
sent my way up to speed.  Hence RLL's incompleteness.
And hence my reluctance to send a flawed copy ISI-bound.

Let me know.  Any messages for these parts -- eg to Tom, or ? ?
Did you know that Jon Nimitz is in India now?  
And what's this anti-Raygun stuff?  I mean, really, he's our president!
Mr Yankee-Doodle himself!  (Forgive me, I have to get in the spirit.
Rand's putting thru a security clearance on me now.)
Mom and Apple Pie!  My country 'tis of thee..

Russ

∂22-Apr-81  1701	Steve Klein <SKLEIN at USC-ISIB> 	Re: Thunderclods and Darkness       

Thunderclods only happen after bombing runs (to not witness would I like).
What is Nimitz doing in India?  Say hi to the world up there where appropriate
(when in doubt laze [for to refer to the instances of being lazy]).  Ignoring
your seekurity clearance aspirations for the moment (if they come by here will
I have stories to tell [rasp, rasp {as in the sound of dry hands colliding
torsion-wise}]) for what is a president except possibly someone to throw
mud-pies at?  Unfortunately, our cheap executive seems intent on not honoring
that tradition of silent clodhood, but insists on being a vocal clod (isn't
that poetic?).  By even suggesting otherwise (this is for rhetorical effect)
you are supporting the infidels (incidents of complaints concerning book
contents [censorship-wise] are up five-fold since January...).

Current status of things here (RLL) is that superiors consider it a good
tool from which to learn how to design OUR representations (aaaaargh!!!!).
The battle being fought is one of convincing that much time would be saved
by USING it in our plans rather than treating it as a model.  If that could
be accomplished, the three-to-five of us would (presumably) put time into
upgrading/fixing things as well as developing our own extensions (or trash,
depending on how things go...).  Consequently, the need is for AMMO to point
out that starting from scratch is a waste of time.   Anything I get from
you now need have no guaranteed status, but the directions in which things
have been extended (actions, control, "world"-knowledge) are important.
It's basically a selling situation with the other details to come later...
Steve.
-------

∂Mailed to SLKLEIN@ISIB 16:03 24-Apr
Answers, maybe...
Nimitz: Story, according to Bonnie, is: some broad juilted(sp) him, so
its off to the peace core (for want of a nearer French Foreign Legion).
SC: Nah, THEY wouldn't trouble you. Tom's on their list, but ...
RLL, and friends:  Well, the fact of the matter is RLL 'tain't yet
releasable; and even when it is I've got no real yen to maintain it.

In terms of Ammo (I kept trying to figure out what it was an acronym for...)
well, RLL does do Slots real good.  And soon will do general functions
as nicely.  What sort of demo would you like?
Would verbal contact be better than written?

Have you seriously considered MRS as a nucleus?  Why or why not?

	Russ

 ∂24-Apr-81  1631	Steve Klein <SKLEIN at USC-ISIB> 	Re: Answers, maybe...     

A nice subject title...if you make them general enough they are reusable
without indirection.

Our current view of "our" representation is based somewhat on KLONE...
intensional concepts vs. extensional individuals, roles with specifications
(for each role instance) of cardinality & value restrictions, one or more
inheritance mechanisms, etc., etc.....  It seems closer to the base state
of RLL than MRS.  If you don't see this as true, feel free to enlighten me.

Steve.
  
(Maintenance only exists if the assumption is that something is being
maintained)

-------

 ∂Mailed to SKLEIN  16:49 24-Apr
Idea:
Why don't you make up a list of things you want to represent, as well
as the sorts of inferencing/retrieval algorithm you need.
Send these (your tired, your huddled, your yearning masses ...
oops - you mean you're not from the security office? Never mind.)
over, and I'll try to cons up a RLL-ish encoding.  (I did this for
a set of some 20+ "facts" after the Expert Systems conference, which
I could mail you -- or have I done that already?)
The powers that be can likewise draw up their idealized KL1ish representations;
and then compare the results.

By the way, I do think your assessment of MRS is apt: it ain't got as many
goodies as RLL's got.  This is true both when comparing base states,
and sum total of available (respective) systems.

If you were to get RLL, how would I communicate fixes/updates/improvements
to you; and vice versa?  This is what I meant by maintenance.

	Ta-taa
Russ
!∂24-Apr-81  2329	Steve Klein <SKLEIN at USC-ISIB> 	Re: Idea:       

I haven't seen the results of the Expert Systems conf...i'll read anything
(once).  The powers-that-be are laboring under the viewpoint that there is
nothing wrong with casting things in concrete as long as you have a vague
idea of what you want.  I'm arguing towards ABSOLUTE (nice to be firm)
generality since we need to represent such things as events & event sequences,
times & time intervals, hypothetical circumstances, not to mention several
funny control regimes (assuming everything fits together) and who knows what
else...

I could (and will) send you a sample of the "hand-waving" level of stuff we
now have, along with the pseudo-strange properties it has.  If I can be
convincing to everyone else at this level then it doesn't matter that any
future flexibility is achieved (that comes for free).  People here are
not sure that the RLL approach to things buys them anything ("excess
generality...we don't need any of that..." type comments).

wrt maintenance, that is a standard hairy area & depends upon whether such
goodies are flowing both directions or not.  At an initial level, there
presumably need be no effort on the part of you people beyond answering
questions (our responsibility to snarf most-recent versions, keep our changes
modular, etc.).  The first problem occurs if we do "contract" debugging (ala
your previous msg) and you would like to get the fixes back.  The final level
of involvement would try to integrate what we do with what you do which could
conceivably be worse than the interaction problems the KRL-types mentioned
(since here we are talking about two totally independent systems).  I don't
know what your thoughts are on reasonable levels of interaction and benefit to
your goals up there.  I don't suppose our munging on your machine would be
politically feasible...

Steve.
-------

Mailed p11 of REPORT[rdg,dbl] to SKLEIN 12:50 25-Apr-81
!∂29-Apr-81  1042	Steve Klein <SKLEIN at USC-ISIB> 	for to collect facts...   
Date: 29 Apr 1981 1042-PDT
From: Steve Klein <SKLEIN at USC-ISIB>
Subject: for to collect facts...
To: RDG at SU-AI

greets...may your happinesses be daylike, etc...
briefly, how much room is there in the units address space (pages,
max unit limit, whatever) plus how much of interlisps basic address space
is unallocated in a vanilla rll?  the question came up and i had not the
slightest idea...
steve.
-------

 ∂Mailed to SKLEIN 13:11 29-Apr
...stcaf tcelloc ot rof
That's the advantage of CORLL - you can have as many units as you want.
They get swapped in as needed, and swapped out as "core" space demands.

How much space is in "core" initially depends on the version of LISP.
On the Diraldo, who know? and who cares?  It's way more than I'll need.
There seems to be less space on SCORE's InterLISP than on Rand-Ai's --
which indicates the disparity amoungst InterLisp implementations.
(IE I can only deduce the two versions start out with different amounts 
of unallocated pages.)

The additional "source code" needed to run RLL (beyond CORLL)
is rather distributed:
There are two compiled files - containing general utility stuff
and RLL specific stuff -- of sizes 56 and 38 disk pages, respectively.
The rest is buried in amongst the units.

That answer your question?
	Russ
!∂29-Apr-81  2241	Steve Klein <SKLEIN at USC-ISIB> 	Re: ...stcaf tcelloc ot rof    

actually...no.  "as many units as you want" is a rather large claim (you 
might gather from this that i haven't seen the CORLL manual yet).  i bet
you can't make 10 million units, if for no other reason then you can't
have that many pointers in general...do you have a number (1k, 10k, ?)?

the other question is a direct one of if you do a STORAGE] how many free
pages there are, plus roughly how much disappears for each unit (unless
the unit index is paged too)...this all from the tops-20 interlisp point
of view.

Steve
-------

 ∂Mailed to KLEIN, (CC DE2)  11:17 30-Apr
Partial spec
Limitations will probably be Atom Name size -- as that will probably be
exhausted before the available disk storage is.  (CORLL allows units to
be stored on such "peripheral storage" place, rather than "in core".)

Anyway, I now have about a thousand units in use; and have had no problem.
Next time I start up RLL I'll execute the (STORAGE) command.

Russ
!∂30-Apr-81  1734	Steve Klein <SKLEIN at USC-ISIB> 	what za chanze? 
Date: 30 Apr 1981 1734-PDT
From: Steve Klein <SKLEIN at USC-ISIB>
Subject: what za chanze?
To: RDG at SU-AI

What is the chance (he asks nicely) that you could find a copy of the CORLL
manual to zing down this-a-way (or a pointer if online there)?  I be much in
your debt given the publication dept's record of achievement...
Steve.

Support National Security (pause) take an MX missile to dinner.
-------

 ∂Mailed to SKLEIN 15:45 1-May
(Whoooosh)
It's on its way.  To answer your question, there is an excellent
chance of finding that manual ...
!∂12-May-81  1556	Steve Klein <SKLEIN at USC-ISIB> 	regrets or whatever  
Date: 12 May 1981 1520-PDT
From: Steve Klein <SKLEIN at USC-ISIB>
Subject: regrets or whatever
To: RDG at SU-AI

Hi.  Got your note (thanks for paper)...sorry I didn't call but Sandy's father
has been in for repairs so things have been a bit unusual...  Talk at you 
later.
Steve.
-------

 ∂Mailed to SKLEIN 11:46 15-May
Whatever, with or without regrets
No problem - as usual I was overly busy as well.  (Among other events
I saw "I Got my act together and am taking it on the road" in Hollywood,
with Bonnie.  It wasn't bad; but definately not worth the $. End review.)

Anyway, yes I got that challenge of things to represent; but have not had
the time to sit down and address it.  I hope to get to it by next week.

Anything else happening in parts south?  Hope Sandy's father's problems weren't
too severe; and that he's better...

Russ

 ∂15-May-81  1311	Steve Klein <SKLEIN at USC-ISIB> 	Re: Whatever, with or without regrets    

Only the normal wrinkles happening...what to do with my life, etc.  Any idea 
what you are going to do when you finish your degree?  Founding small companies
seems interesting but so does working for other people if interesting and pays
well (concession to real world...).  I think Barry and I are going to try
creating something to sell to see how that works...nearly everybody in the
Caltech CS dept is running around pursuing "outside interests".

Sandy's father had a lung tumor (benign) that they hacked out (take heed 
smokers of the world...your time will come) but he seems to be coming along
fine.

About time to discover the next place to live (they're selling this one out
from under us)...I hate it...

Steve.
-------

	(klein, con't)
∂01-May-81  1745	Steve Klein <SKLEIN at USC-ISIB> 	A Test of Wizardry   

Well...you asked for it...a piece of representation to (potentially) be
encoded in RLL.  I hope this isn't too large.  Let me know if you find
anything obstructionist or ambiguous.

Have you read any of Levesque's stuff and what you think?  The article I've
seen is the one in Findler's Associative Networks book.

Steve.

-----------------------------------------------
Preconditions:

  Our general context is the task of text production. The following is meant 
as (part of) a representation of the following sentence:
  
  "Jane Doe has cancelled her appointment with us on Wednesday morning."

Conventions:

Things in ALL←CAPITALS are Generic or Individual Concept Names.
 Generic Concepts can have subclasses (specified by the SuperC notation).
 Generic Concepts can be individuated (specified by the Isa notation).
 Individual Concepts represent extensional instances and cannot be
   subclassified or individuated.
 Concepts can have multiple "parent" concepts.
Things below concepts are Role Specifications, which consist of
   a Role Name plus {(Restrictions)} plus a {Role Filler}        {} => optional

Concept Names     =>  strictly handles
Role Names        =>  again handles, but inheritable and (perhaps) renamable
                         (see the VISIT concept below for a rename instance)
Cardinality       =>  single value or <NUMERIC> range of the 
                         <NUMBER OF> role filler(s).
                         (also, we have been encoding optionality vs.
                          necessity as a lower  bound  of  0  or  non-0.
                          It is separable, but must be encoded somehow.)
ValueRestriction  =>  concept which the role filler must be eq to or 
                          descended from.
Role Filler       =>  some concept or set of concepts meeting the applicable 
                          restrictions.

Role specifications are inherited by subconcepts of this concept and their
  individuals, ad nauseum, with (some) deepest value taking precedence in 
  cases of conflict.  The deeper specifications must be more restrictive than
  their shallower (higher, more generic) ones.


***Generic Concepts***

OBLIGATION SuperC ("SomethingOrOther")
  Performer (Cardinality 1:n, ValueRestriction AGENCY)
  Beneficiary (Cardinality 1:n, ValueRestriction AGENCY)
  Event (Cardinality 1, ValueRestriction ACTION)

APPOINTMENT SuperC (OBLIGATION)
  Event (Cardinality 1, ValueRestriction VISIT)

ACTION SuperC ("SomethingOrOther")
  Time (Cardinality 1, ValueRestriction TIME←INTERVAL)
  Actor (Cardinality 1:n, ValueRestriction AGENCY)

VISIT SuperC (ACTION)
  Visitee (Cardinality 1, ValueRestriction LOCABLE←OBJECT)
  Visitor (= Actor)

TIME←INTERVAL SuperC ("SomethingOrOther")                       |
  BeginTime (Cardinality 1, ValueRestriction TIME←MOMENT)       |  lotsa fur.
  EndTime (Cardinality 1, ValueRestriction TIME←MOMENT)         | 

PERSON SuperC (AGENCY)
  Sex (Cardinality 1, ValueRestriction SEX)

SEX SuperC ("SomethingOrOther")
  

***Individual Concepts***

APPOINTMENT#1 Isa (APPOINTMENT)
  Performer JANE←DOE#1
  Beneficiary ISI
  Event EVENT#1

VISIT#1 Isa (VISIT)
  Time WEDNESDAY←MORNING#1
  Actor JANE←DOE#1

WEDNESDAY←MORNING#1 Isa (TIME←INTERVAL)

JANE←DOE#1 Isa (PERSON)
  Sex FEMALE

FEMALE Isa (SEX)

MALE Isa (SEX)

ISI Isa (AGENCY)

-----------------------------------------------------------

Unanswered questions:

The above is a single hierarchy...will this suffice 

Where to place inter-role constraints.

What to do with hypotheticality  (VISIT#1  above  should  be  a
hypothetical visit <IN THE TIME←INTERVAL "FUTURE">)

Is something lost by role names having  significance  only  for
inheritance

How to support  manipulating  times,  events,  objects  without
diverse hairy access methods

THE REPRESENTATION HAS TO PROVIDE FOR SEVERAL SETS  OF  STATUS
MARKS ON THE WHOLE COLLECTION.  ALL OF THESE KINDS ARE FOUND ON
BOTH CONCEPTS AND ROLES.

 .  ONE  SET  REPRESENTS  READER'S KNOWLEDGE OF EXISTENCE:  IT
    CHANGES INFREQUENTLY AND IS BACKWARDS INHERITED.

 .  ONE  SET REPRESENTS READER'S CURRENT ATTENTION.  IT IS NOT
    INHERITED.

 .  ONE  SET  REPRESENTS  WHAT HAS ALREADY BEEN CONVERTED INTO
    TEXT BY THE SYSTEM.  IT IS NOT INHERITED.>

-------

 ∂To SKLEIN@ISIB (18:11 20-May)
At long last, the ANSWERS!!!  (well, more or less...)
First, my standard meta-comment (I know, I know: that last statement, my
first "real" statement, was really meta-meta-.  Anyway,) Rumor has it that
Levesque is heading for Fairchild here in PA, to join Ron Brachman.

Anyway, the above looks amazingly KL-ONEish; and none of it seems even
difficult.  The fact that RLL's document implies a disdain for SuperC type
of operators doesn't mean that users can't simply use the existing
SuperSet slot to provide that function.  Simply indicating that the
various slots you want inherited are inheritable/specializable seems to
address the final issue.  (IE the mechanism for value restriction is all
set up.)  Basically the only major change you'd have to made would be
lexical; and using Typicalx to store the defaulted values, over Anyx.
(That is, if you wanted to use RLL as it stands now.  Of course you would
be amply welcome to modify (your copy of) the units to correspond to
precisely what you wanted.

Things like storing the cardinality of a "slot" is easy to do in RLL -- it
is stored on the unit which representing that slot (as part of the range
specification).  In fact, it can be automatically deduced from the
definition of the slot, in many cases.  One more plug -- RLL currently
"knows" about sets, lists and bags (as well as singletons), and permits
you to declare the value of a slot to be any of these data-structures.
Then, when you add on new values, RLL determines, for example, whether the
order of this new insertion makes any difference, or if duplicated entries
are permissible.  One may also use the FListN data-structure to specify
the value of some slot to be a list of elements of (possibly) different
types -- eg (FListN UnitType NumberType (FSet BooleanType)) means the
legal values for this slot will be lists of three elements -- where the
first is a unit, the second a number, and the third is a list of booleans.
(The knowledge the knowledge about the datatypes is, of course, stored in
UnitType, NumberType and BooleanType.  Let me know if you want more
details about the how this knowledge is stored, or used.  Or more about
the way RangeTypes are used...  Note finally that this same formalism is
being used to describe arbitrary functions -- not just slots...)

There are many ways of referring to a collection of units.  One is to
regard them all as members of class in your hierarchy.  (As any unit can
have many parents it may, therefore, belong to several groups -- eg
Reader's Current Attention, as well as its current position in the
organization of the world.)

For this particular example I would not advice that method.  First, what
that set of entities have in common is really a meta-relation -- ie its
not John in the Reader's current attention, but the John unit ...
(Assuming I understood your example.)  Anyway, there is nothing which
prevents you from defining a RCA units, and a CollectionOfUnits slots,
such that the value of RCA:CollectionOfUnits is just that set of units.

------ As I didn't get a sense of what, exactly, I was supposed to answer,
the above ramblings were just things your example above triggered; and,
undoubtedly didn't answer the questions you had.  Do feel free to ask
again, and to constrain my meandering by including more precise inquiries.

Nothing new to report from PA.  And there?

Russ
!∂TO SKLEIN@USC-ISIB 16:43 22-June
Answers! (And if you believe that, do I have a bridge for you...)
*-*-* [Step 1: Observe funny squiggles on flush against left margin.  Icky, huh?
*-*-*  Unfortunately, these are the particular characters I ended up choosing
*-*-*  for prefacing my remarks.  They are now littered perfusing about the
*-*-*  now messy remnants of your last message.  Enjoy, as best you can...]

 ∂17-Jun-81  1639	Steve Klein <SKLEIN at USC-ISIB> 	Re: At long last, the ANSWERS!!!  (well, more or less...)    

Hi...got tangled in another part of our project, hence the delay.  Anything
new in sight there?  Anyways, response to your response.

First, the cardinality of a slot is not the cardinality of a GENERIC slot, but
merely the particular instance associated with this unit/concept.  What
this seems to imply is doing something like creating a unit for each instance
of a slot and putting the cardinality/range&type checking stuff there.
	*-*-* Yes, this is the sort of thing Doug has been talking about for
	*-*-* a while.  It is currently not implemented, as I never found a
	*-*-* need for this facility.  (This might be because I never understood
	*-*-* it...) 
	*-*-* To make sure I understood your example -- do you mean every thing
	*-*-* which IsA Obligation, has a performer; and, in fact, it has
	*-*-* an nonNIL set of Performers?
	*-*-* Should I assume the value of a unit's Performers, for general units, 
	*-*-* does not have this restriction?

	*-*-* Anyway, in every case I dealt with, the
	*-*-* cardinality of a slot was invariant... those times I needed
	*-*-* to store similar sorts of things with variable formats, I
	*-*-* realized I was really talking about two types of things, and
	*-*-* as such, they were deserving of distinct slot-names.
	*-*-* This was an epistemological distinction, not linguistic ---
	*-*-* you certainly may want to use the same NAME for these entities,
	*-*-* and trust the system to disambiguate the slot name into the
	*-*-* obvious form.
	*-*-* For example, declare Performer to be 
	*-*-*	(OneOf ObligationPerformer CircusPerformer),
	*-*-* where both ObligationPerformer and CircusPerformer are predefined
	*-*-* slots, doing the right things.  [In particular, the value of
	*-*-* MakeSenseFor(ObligationPerformer) must include TypicalObligation,
	*-*-* and MakeSenseFor(CircusPerformer) must include TypicalCircus.]
	*-*-* Then the value of Performer(UnitX) will be either 
	*-*-* ObligationPerformer(UnitX), if UnitX:Isa includes AnyObligation, or
	*-*-* CircusPerformer(UnitX), if UnitX:Isa includes AnyCircus.

	*-*-* Notice these two subslots of Performer could be totally different;
	*-*-* or their only difference may be in their respective formats.
	*-*-* (Permitting the value of ObligationPerformer to be a set,
	*-*-* while the value of CircusPerformer could be a single atom...)

Ex:  Concept Obligation ==> Unit AnyObligation w/ 
                               Performer = (*Do* FSeeUnit ObligationPerformer)

                  and       Unit ObligationPerformer w/
                               Format = NonEmptySet
			       SuperClass = Performer
	*-*-* SuperClass is inappropriate here -- ObligationPerformer, as I
	*-*-* understand your example, is NOT a set, but a further specification
	*-*-* of a slot.  Perhaps you meant "SuperSlot = (Performer)", or
	*-*-* maybe "UnitRangeType = AnyPerformer" [<- ie the range of this
	*-*-* slot is (FNonEmptySet (UnitType (*P AnyPerformer)))]
			         etc.

Questions are:   does something like this work?
	*-*-* Yep, the subslot mechanism, and associated OneOf slot combiner,
	*-*-* are now in RLL. 
		 is there a better way?
	*-*-* Yes, there is a slightly more natural mechanism (one with less
	*-*-* "bulky" and artificial units) 
	*-*-* for achieving this same results --
	*-*-* One simply indicates the ToCompute of Performer is FindDefault,
	*-*-* and stores a value of the form (*Do* FExecute (LAMBDA (un) ...)
	*-*-* on each TypicalX:Performer which might be queried.
	*-*-* I did not mention this above because there are still many details
	*-*-* involved that have not been hammered out.
		 the level of indirection is somewhat disturbing...
	*-*-* Why so unsettling?   These "subslots" do refer to different things,
	*-*-* this formalisms forces you, the creator, to acknowledge this.
	*-*-* Of course the casual user need never know about this -- and, in
	*-*-* fact, he never has to use these subslots,
	*-*-* thanks to that disambiguating facet of RLL's "mini-front end".

Next...could you discourse on inter-slot constraints?  Have you built
mechanisms for either enforcing consistency between slot values or signalling
when inconsistencies exist and how do you represent such stuff...note again
that this applies at the instance level (hence doesn't seem to directly
match your type-checking mechanism)
	*-*-* At the "generic slot" level, we have just what you need.
	*-*-* As you can define the ToPutValue function for any slot,
	*-*-* you could incorporate, by hand, any check you think is
	*-*-* necessary.  Of course, RLL's default mechanism already
	*-*-* does a whole lot of these -- basically by replacing "faulty"
	*-*-* values with correct ones. [Sketch: Storing V on U:S will cause
	*-*-* (i) U to be added to V:S-1, if S-1 = inverse of S exists; and
	*-*-* (ii) various W:T's will be "invalidated", where the T slot
	*-*-* was built using S.  I might mention the PutValue call will return
	*-*-* an error condition (here, by returning NIL) if V does not satisfy
	*-*-* S's domaintype predicate. [What really happens is a bit more
	*-*-* complicated, of course.]]
	*-*-*	Anyway, it would not be hard to add in another set of things
	*-*-* to do when a new value is PUT.  As before, I have simply not needed
	*-*-* this particular bell/whistle, to explain why this functionality
	*-*-* is not present.
	*-*-* If you give me a particular case, I can try to either show
	*-*-* how RLL already does this; or concoct up a new, hopefully general,
	*-*-* mechanism, for achieving that effect.

	*-*-* I still haven't said anything about handling this at the instance
	*-*-* level.  The subslot solution is probably still the "right" way
	*-*-* to go.  Let me know if you think otherwise.

	*-*-* In terms of "represent(ing) such stuff": well, much of what is
	*-*-* now done is rather declaritively encoded -- using things like
	*-*-* CVsUsedBy and Inverse slots of the units which repesent the slots.
	*-*-* (These brief values "expand" into the code which actually does the
	*-*-* corpus of work suggested above.)
	*-*-* Any other such tests/conditions/constraints you may wish should
	*-*-* be similarly encoded.

Also, how are multiple inheritance mechanisms handled?  your note seems a
bit sparse in what is actually happening internally to support this.
	*-*-* "Inheritance is a many splendored thing."  
	*-*-* This question probably
	*-*-* stems from the different senses of the term we are using.
	*-*-* To me, for that report, inheritance mechanisms were used for
	*-*-* initializing a new unit.  (One of my current tasks is to use
	*-*-* some inheritance-like thing in a slightly different sense:
	*-*-* to, for example, incrementally specialize a succession of units,
	*-*-* ala UNITs.)

	*-*-* Anyway, the three current mechanism correspond to:
	*-*-* Isa Inheritance:  used to create a new Fido, by telling the
	*-*-*	"procedure" that this new entity Isa AnyDog -- or even that
	*-*-*	Fido Isa (AnyDog AnyMotleyCreature).
	*-*-* SubClass Inheritace: Getting the AnyPoodle class, from AnyDog --
	*-*-*	or having AnyWhiteElephant:SuperClass = (AnyAlbino AnyElephant).
	*-*-* TypicalExample Inheritance: Initializing TypicalDog from AnyDog.

	*-*-* These three are just independent things -- and, in some sense,
	*-*-* they in no way interfer with each other.

	*-*-* Or did your question mean to ask:
	*-*-* To what value will Fido:Color be initialized,
	*-*-* given that Fido is being created as an Albino Dog?
	*-*-* And explain that procedure.

	*-*-* (I was afraid of that affirmation.) Ok - honesty:  This don't
	*-*-* work right.  Currently the implementation is far too simple: it 
	*-*-* will declare Fido to be either the default color for (Typical)Dog,
	*-*-* or the default color for (Typical)Albino, whichever it finds
	*-*-* first.  If anyone pressures me into it, this algorithm could be
	*-*-* updated to do some more-nearly-correct type of thing - like check
	*-*-* first to see if some characteristic is definitional, and use that
	*-*-* before considering any merely assertional fact.  Or using some
	*-*-* general ordering of property "epistatus" types
	*-*-* - from Defination, Derived, Asserted, ... thru 
	*-*-* Defaulted, and OnlyIfReallyDesperateForAValue-ed.
	*-*-* I delayed implementing this until I figured the "right" way to
	*-*-* store such epistemological marks on the propoerty; something still
	*-*-* on my agenda.  (Another less declarative, but more versatile, tack
	*-*-* involves storing procedural rules with the ToInitializeValue of
	*-*-* slot (eg Color), as well as with each TypicalX:Color.  Then some
	*-*-* general rule interpreter would walk thru these to determine the
	*-*-* initial value.  But I didn't do that, either.

--this all looks KL-ONEish as a result of it being derived from it
(abstracted?).  Onwards...(scritch, squeal..)

Steve.
-------

*-*-* Anyway, these "answers" were written (probably too) quickly; and may
not have adequately addressed your inquiries.  Feel free to write for
further elaboration, if you wish.

*-*-* I forwarded your "let's get together" suggestion to Doug, who may or may
not respond in the near future.  He's been busily EURISKOing the last few weeks,
over at Xerox.  He's shifted his attention away from RLLish issues sufficiently
long ago that he may not have terribly much to say.  But we'll see.
Mike Genesereth would be a good person to join in the discussion, but unfortunately
this meeting will not be in upper Altantic Ocean; and Mike will be, by then.

*-*-* Anyway, I'm game to your strange request to enter a higher bandwidth
communcation -- even though I'm convinced that whole idea of Talking will NEVER
catch on...
I'll let you know when, when I know.

Caio,
	Russ

	(klein, con't)
∂22-Jun-81  1416	Steve Klein <SKLEIN at USC-ISIB> 	RLL demo...perhaps   

Greets.  We will be up your way for the Assoc. of Comp. Linguistics conf.
next weekend until wednesday.  Whats the possibility we could get together
with you and Doug for discussions, etc.?  If so, could you propose some times?
Meals mon-wed are open as well as sun,tues evenings.  Among things it would be
nice to discuss would be specific questions of availability & system
"lifetime" plus perhaps some demo or other.  Our complement would be somewhere
between Bill Mann and myself and the whole group of 4/5.  Let me know what you
think.
Steve.
-------

 ∂22-Jun-81  2323	CSD.LENAT at SU-SCORE 	Re: When would be good for you?      

Practically anytime is OK with me.  I think next Tuesday
may be best, as I am having a demo for a Schlum. folk then.
(Tha is the 30th I believe) -- somewhere in the lunchtime-2pm range.

Doug
-------

 ∂23-Jun-81  1304	Steve Klein <SKLEIN at USC-ISIB> 	Re: How about Tuesday, noon?   
To: RDG at SU-AI
cc: Mann at USC-ISIB

Sounds fine.  Assuming we include lunch, I'll let you dig up your favorite
PA somewhat-fastfood joint (ACL session time constraints...). Ok?
Steve.
-------

 ∂23 Jun 1981 2336-PDT	CSD.LENAT	schedule for Tues
To: csd.greiner

Looks like lunch at the faculty club at noon,
and demo at PARC at 1:30.

How many for lunch?

Doug
-------
 ∂24 Jun 1981 1723-PDT	CSD.LENAT	misc
To: csd.greiner
cc: csd.gotelli

Ok, good, Russ.  I have worked at the RLL paper a bit
and sent a draft off to Don W.; we will do more around editing time.

Lynn: please make reservations for me, for 4 peoople,
next Tuesday at noon at the Faculty club.

Doug
-------
 ∂24 Jun 1981 1248-PDT	CSD.GREINER	Re: Number for lunch
To: CSD.LENAT
cc: CSD.GREINER
In-Reply-To: Your message of 23-Jun-81 2336-PDT

For sure Steve Klein and Bill Mann (in addition to you and me). 
There are two or three other ISIers --
but that many more people would probably only slow down our discussion...
So unless you object, let's make reservations for 4.  I'll send Steve
a msg tomorrow (ie let me know by then if this is not what you want.)
	By the way, Steve and I have sending messages back and forth
since AAAI, discussing RLL.  Basically both he and his (still KL-ONEing)
group at ISI are sold on by the rll ideal, and all are toying with the
prospect of using RLL-1 itself.
	(Final note: Steve and I know each other from CalTech, years ago.)
Russ

PS Any word on the RLL document for BES?  Is it that bad?  Or are you just
waiting for the final editing session with (Rick and Don) to splice
it in?
-------

!∂24-Jun-81  1508	Steve Klein <SKLEIN at USC-ISIB> 	IJCAI 
Date: 24 Jun 1981 1457-PDT
From: Steve Klein <SKLEIN at USC-ISIB>
Subject: IJCAI
To: Pressburger at SCI-ICS, RDG at SU-AI

Anyone planning to go to IJCAI / and what means of transportation, timeframe?
Steve.
-------

 ∂To SKLEIN@ISIB, PRESSBURGER@ISIC (11:40 25-June)
Finally some easy questions to answer!
I'm flying - leaving from SF on 24/VIII (on Western #465),
and then returning on the 30th of August, (on Western #462,) maybe.
(Some friends and I might go camping the week following IJCAI.)

Et tu?

By the way, SCI has been down for about a month -- I think Tom's best
address is @ISIC.  (Is that true, Tom?)

Finally, Doug and I are all set to meet with Bill Mann and you at noon
this Tuesday -- the plan is to eat at the faculty club, on campus.
Doug has to give a demo at PARC at 1:30; but I'll be around.

Russ

 ∂TO LENAT@PARC, CSD.LENAT@SCORE  17:03 29-Jun
Meeting tomorrow
Doug -
	I'll see Steve Klein (and I assume Bill Mann as well) at the
ACL meeting tomorrow morning.
We three can meet you at the Faculty Club shortly after noon.

See you then.
	Russ

	(klein, con't - then p.17)
∂14 Jul 1981 1516-PDT	CSD.GREINER	News from ISI
To: csd.lenat
cc: CSD.GREINER

Steve just called me -- he has accepted the challenge, and is set to
immerse himself in the glory and wonderment of RLL.  I proposed he
meander here relatively soon -- hopefully while I'm indoctrinating Greep.
So perhaps next week, or the week just thereafter.  Is that ok by you?

I'll dig up the forms I have for product release.  I guess you and I
should sign the RLL release, and you and Dave the CORLL one -- or are
both necessary?

Next issue: which machine?  There are a slew of hassles just switching from
SCORE and Rand-Ai; and I'd rather not be responsible for 3 machines.  Should
I encourage Steve to contact Rand, and see if they can give him an account
(which I assume will be difficult, given the hope of the Rand people to keep
Rand-Ai uncluttered), or should Steve get an account on SCORE -- at least
for his training time?  Or should RLL sprout a 3rd home?

-----
No news on either the thesis or BES front:  My principle text editing
machine is SAIL, which has been flakey of late... So I've been fixing up
some of the RLL-related utilities, and now will get back to finishing
up the Rand task.

------
Any word from Tom Deitterich, or Jim or (who was the third person you were going
to contact)?  Also, have you talked anymore with the woman from South Africa?

	Russ

∂15 Jul 1981 1153-PDT	CSD.LENAT	rll news
To: CSD.GREINER

Sounds good; anytime is OK to have Steve up.
I think it best if he works over the net on an ISI machine;
it can't really be that difficult to switch -- just the FTPing
hassles, and you can let HIM be responsible for that -- you just
keep "the latest" version somewhere (Rand or Score) and make
sure he can ftp from that place, and gets notices of new "releases".
Probably he'll just take one semisolid vversion anyway.

Saw Jim and Tom and Avron, and don't know yet who if anyone
will be joining up.  Should know soon. Probably NOT Tom,
as he seems fixed upon Dave Smithing it -- doing some
small thing very carefully, theoretically, and properly,
rather than some big thing anyway possible.

Doug

∂TO SKLEIN 11AM 27-Jul
Well....
Steve:
	So, when are you hobbling up north?  I'm in no particular rush,
but others are:
Some people have been asking about RLL-ish sorts of things, requesting
demos and things like that.  I figured I could do that whilst showing
you the system, as that was about to happen any day now.  And now they
are starting to show the first signs of impending impatience.
(Can "impatience" be "impending"; or did I just make that up?  Sounds good
anyway...)

	By the way, would you like to do a bit of propoganda-spreading and
possibly recruiting during that stay?  We of HPP have a weekly meeting
at which you could probably speak; if you've the yen, time, interest,
guts, ...  The standard time is Friday, at noon.  Let me know...

	How're things there?   In the police hdqrs?  At ISI?
I did get your little blurb
	Caio,
Russ

∂TO CSD.SMITH@SCORE (CC SKLEIN@ISIB) 14:37 10-Aug
New CORLLer
Dave -
	Steve Klein (SKLEIN@ISIB) is now using RLL, and hence CORLL as well.
Could you add him to the list of people whom you inform about each CORLL
fix/update/modification.
	Thanks,
Russ

∂10-Aug-81  1524	David E. Smith <CSD.SMITH at SU-SCORE> 	Re: New CORLLer     

I don't have any such list.  I also won't be using CORLL anymore and hence
don't intend to do any maintenance on it.
-------

	(conversations with Steve Tappel)
∂31-Jul-81  1605	STT  	Nancy and perspectives  
The mystery is solved. I just got a postcard from Nancy, she left on short
notice to Phoenix, Arizona (vsiting family I presume) and says she'll be
back the first week in August.

I'd like to meet with you sometime soon, say early next week, to talk about
perspectives and views. I'm trying to put my reformulation stuff into a more
general framework, especially, what does it correspond to in non-mathematical
domains? The line I am taking is to consider a formulation as a special case
of a view, where a view of an object is basically a set of features (slots) of
the object. Reformulation then corresponds to changing one's view, to better
adapt it to one's current purpose. A "perspective" seems to be some
sort of meta-view, telling one which features go together to make a coherent
view. Well anyway, you have thought some about perspectives and views and 
may be able to help me sort this out. 

	RLL Mini-Tutuorial - ca 3-7 August 1981 - Klein, Jonathan King, Greep

∂27-Jul-81  1736	Steve Klein <SKLEIN at USC-ISIB> 	Re: Well....    
To: RDG at SU-AI
In-Reply-To: Your message of 27-Jul-81 1308-PDT

Sorry.  Next week would be ideal.  We need a few more days to ready "test
material".  I haven't figured out whether I want to end up there Sunday or
Monday yet, though.  I decline all propaganda and such things opportunities
as they make me nervous.  Page 27 mention is one of the fine opportunities
ISI offers.  All is as it usually somewhat is.  The mass defections going
on at the moment are making people mildly odd (I think I mentioned that
eight to ten people are deserting).  Having a hard time deciding where to
look for a house (and running out of time).  Sandy's having a hard time
deciding what she wants to do in general (would you work for the LAPD?)
Let me know if you made any plans such that I should choose a different
arrival time.
-------

∂TO CSD.LENAT 13:23 28-Jul
RLL Mini-Tutorial
Doug -
	Looks like Steve will be coming next week, circa Monday.
I plan to just give him an informal run thru (spending only, say,
part of Monday), and let him then attack his particular task.

	I'll contact Jonathan King (now of HP) and have him sit in, if he wants.
I've not seen Greep recently, but he may want to join this ensemble also.

	Do you want to give any blurbs, sales pitches, or what-not?
Shall I expose them to MRG, and his MRS?  Time to make some color glossies?
Any comments, etc.?

Russ

∂28 Jul 1981 1450-PDT	CSD.LENAT	RLL DEMO/TUTORIAL
To: CSD.GREINER

No special presentation.  Forget MRS -- do not strain their
minds needlessly.
Doug

∂28-Jul-81  1542	Steve Klein <SKLEIN at USC-ISIB> 	no = yes   
To: RDG at SU-AI

is it to be presumptioned dat the plan of yesturdday iss acceptable?
you have a spare floor piece for a while by any chance?

∂29-Jul-81  1126	greep at RAND-UNIX 	Re: RLL Tutorial-ette    
In-reply-to: Your message of 28 Jul 1981 1334-PDT.

Yes I'd like to observe.

Best mailbox (and one most often checked) is greep@SU-DSN.  However,
the most reliable one (in terms of the machine being up) is greep@RAND-AI.

∂TO SKLEIN 15:26 29-Jul
No, no, no, ja, oui, no, si, cain, nein, lo, ...
Sure - I'll be busy both Sunday and Monday nights (dancing and Basketballing,
respectively).  But come whenever.
(Unless you want a chaffeur service. Feel free to use my car if you
need a vehicle (it's manual transmission, if that makes a different).
Only I don't have all that much time...)

As to floor space: my landlord has some funny policies wrt guests
-- he doesn't especially like people in general, and visitors in particular.
So I'll not be able to supply even floor space, unfortunately.  Perhaps
Tom could?  Wasn't ISI going to store you in some fancy-smancy hotel, or
at least give you some allowance to reward you for braving the wiles of
perfunctory(sp) Palo Alto?  If not, then it's not too surprising to hear
of a whole herd's defection from there...

Anyway, I still don't know quite what I'm going to do then.  Probably
spend part of the first day completing a tour thru RLL's current set up;
and then let you loose.
If you've some particular thing you'd like to see demonstrated, let me
soon.  Otherwise you'll get whatever mishmash seems appropriate to me;
and I've often been wrong in such decisions.

Some people: Jonathan King of HP and Steve Tepper (alias Greep [his choice])
will probably be in the audience as well, at least during the introductory
session.

By the way, did Ben contact you?  He's on one of his periodic n-month vacations,
and is starting from LA.  I gave him your name, number, address, ...
For symmetry,
	Ben C. Moszkowski
	  (213) 477-2105 -- [Mother "L"ena] ?, Los Angeles, CA 900??
	  (213) ?	 -- [Father] 2567 S. Barryton Ave, Los Angeles, CA  90064

---
That's all for now.  See you soon.
	Russ

∂TO SKLEIN @ ISIB 12:43 31-Jul
tick, tick, tick, tick...
Steve -
	So when should I expect you?  And where?  If you like, I can ask
for floor space for you.  CS people with spare rooms include
	Milt Grinberg - CSD.GRINBERG@SCORE
	Mike Genesereth - CSD.GENESERETH@SCORE

See you soon,
	Russ

∂31-Jul-81  1636	Steve Klein <SKLEIN at USC-ISIB> 	Re: tick, tick, tick, tick...       
To: RDG at SU-AI
In-Reply-To: Your message of 31-Jul-81 1243-PDT

Russ--
Da Details:  I'll be arriving there this Sunday a bit around 10:30pm.  My
return is for the following Sunday at Noon.  I have semi-room arrangements
(currently a hole for Tuesday nite--there seems to be a Chess tournament there)
and a vehicle, so no problems there...I'll get hold of you Sunday evening to
see what's next, unless you have alternative suggestions.
Steve.
-------

∂ 1 Aug 1981 2031-PDT	GREINER		RLL Demo
To: greep at RAND-UNIX, greep at SU-SCORE, jjk at SU-AI, stt at SU-AI
cc: greiNER

... will be held at 11 AM, this Monday morning; if all goes as planned.
(Steve's due to arrive the previous night.)
Please meet in my office - 251 Margaret Jacks.
	Russ
-------

	Messages with Jonathan King - HP
-- Mailed him the following messages:
∂06-Apr-81  1612	Steve Klein <SKLEIN at USC-ISIB> 	Re: Yak, Yak, Yak    
∂01-May-81  1745	Steve Klein <SKLEIN at USC-ISIB> 	A Test of Wizardry   
∂To SKLEIN@ISIB (18:11 20-May)
∂TO SKLEIN@USC-ISIB 16:43 22-June

-- real contacts:
∂TO JJK  15:43 24-Jul
Where it's at
Jonathan:
	The file JJK[rdg,dbl] has some of my messages with Steve Klein --
I printed you a copy (left in the G mailbox); or feel free to examine it
on line.
Sorry it's so chatty -- Steve and I have known each other for 8 years now...
	Russ

∂24-Jul-81  1732	JJK   via SU-TIP    
THANKS, I'LL PICK UP THE LISTING.

∂TO JJK 13:31 28-Jul
RLL Tutorial-ette
Jonathan:
	Looks like Steve Klein, from ISI, will be coming next week,
circa Monday. I plan to just give him an informal run through of RLL,
(spending only, say, part of Monday),
and let him then attack his particular task.

	Would you like to sit in on some of the seesions -- in particular
the first one?

	The actual time is still up in the air.  I'd prefer late morning,
around 11; but Steve may just be arriving then.  Do you have any preferences?

Russ
	Messages with Steve Tepper (Greep) - Rand, Stanford

∂TO GREEP@SCORE, GREEP@Rand-Unix 13:34 28-Jul
RLL Tutorial-ette
Steve -
	Looks like Steve Klein, from ISI, will be coming next week,
circa Monday. I plan to just give him an informal run through of RLL,
(spending only, say, part of Monday),
and let him then attack his particular task.

	Would you like to sit in on some of these sessions -- in particular
the first ones?

	The actual time is still up in the air.  I'd prefer late morning,
around 11; but Steve may just be arriving then.  Do you have any preferences?

Russ

PS What is your prefered mailing address?

∂12 Aug 1981 14:45-PDT	greep at RAND-UNIX	Re: RLL Demo
To: GREINER at RAND-AI
In-reply-to: Your message of  1 Aug 1981 2031-PDT.

Sorry I never got back in the afternoon, got sucked into a meeting.
Am now shanghaied down in LA, back in a couple of weeks.
                ---------------
-------

	Follow up conversations with Steve Klein (from 12-Aug-81 on)
∂TO SKLEIN 12:06 12-Aug
All sorts of miscellany
Yes, I did see (and subsequently destroy) your note; and did 
probe about a bit, but couldn't find your pad.  Sorry.  Are you sure it
wasn't in you hotel room, or under something in the car you rented?
Shall I give 'em a call?

I see the traffic-controller's absense has been felt - given your exciting
voyage back.  I'll heed your warning, as best I can.

Thanks for fixing up the EMACS.INIT file.  For some reasons the desired
HEATH.* files have never been stored on the obvious <EMACS> directory,
on SCORE.  (The file I sent lives on [Rand-Ai].)  Anyway, substituting
<CSD.HPP-UTILITIES> for <EMACS> renders the file usable.

I've been fixing up the AllIsas/MyAllIsas stuff - and then I'll return
to the FSeeUnit stuff.  Do you want to be vice-president in charge of
writing the "record-changes-to-nucleus" stuff for RLL?
You may assume that every put/add/delete/substitute calls the function
DefaultAfterPutValue, or assorted arguments.
(Even those hand-crafted after-put-values contain this call.)
Hence an appropriate edit of this function would be sufficient.

Suggested algorithm:
	Check first if the unit affected is in a nuclear KB.
[The UA-KB? function returns the full name of the KB to which a unit
belongs.  We'll need a global variable to hold the relevant KBs --
possibly this variable should be set in RLL-StartUp.]
	Next make sure the change is at "top level" -- there is no
reason to spend time and energy to store effects which follow from
some known initial action.  This will use the "why" variable;
which will soon undergo radical changes. (See below.)
	Now for the hard part: We only want to record "relevant"
alterations.  For example, I may add a new subclass of Anything, say AnyFrog,
which is in the DUMB kb.  There is no reason you need
to know about that.  So here we'll need code which examines the "modif"ication
variable, to determine whether all the additions were to nuclear
unit, or something like that.  Of course it gets further complicated if
ever I add both AnyFrog and AnyRLLUnit to Anything at the same time
(where AnyRLLUnit does indeed belong in the nucleus).  Now you'll have
to subset the values, ...  (Boy I'm glad you'll be doing this, and not me...)
	If all of these pass, write on some external file what
this change was.  The easiest mechanism may be to walk back up the
stack to the call to *Value, where * is [Put, Add, Delete, Subst],
and then write out that function, and its arguments as quoted values.
[Of course if you do the full-blown modification described in the third
paragraph, you'll have to twiddle those values accordingly.]
(The function ?UU-RECORD?? (sorry, I don't have my CORLL manual here)
might give a hint for how to do this.)
----
Other functions which have to be massaged:
CreateUnit, KillUnit, RenameUnit -- this is straight forward:
simply recording what unit has been changed, and how.
From here on the various PutValue's will
do the required work.

Final consideration:  This recording function should probably be written
as a seperatable function, or at least a macro.  I may, for example, 
want to make some quick change to some nuclear unit, and not want to
go thru the entire rigamarole (sp) of the expensive PutValue call.
To avoid trouble, though, I should jot down this change in that external
file... I don't know, maybe we should just advise UA-PUTPROP accordingly?
(Or perhaps UP-PUT, going a unit at a time.)

Do you thing this will work?  Realize there should be some general mechanism
for doing this sort of task, as even when RLL's nucleus ceases its
leaps-and-bounds growth, there will still be times when several people
will want to use a common KB, even though each person is working on his
own distinct task.

-----
Anyway, I should get back to work.  I'll be spending time with brother Miles
next Monday and Tuesday, and then be at the Cognitive Science meeting.
I'll try to return to hacking that week-end (22-23 Aug), and then I'll
be gone until 4-Sept.  & I've still Rand-related stuff to do, not to
mention my far-too-long-neglected thesis.

On other fronts, still no word from Dana.  I suppose there's a very
clear message in this silence.  Damn women, anyway!

Let me know what you're up to.  Good luck on your house-shopping.

Russ

∂12-Aug-81  1454	SKLEIN at USC-ISIB 	Re: All sorts of miscellany   

Russ--

I found the noteboooks last night...they were buried on my desk (this episode
triggered an attempt at cleanup).  Thanks for looking and sorry for the wild-
goose-chase aspects.  The task you set out looks feasible.  I'm trying to
finish up something short at the moment, so I'll get back to you in a day +-
1/2 to let you know whether I agree with / understand all of your outline.

Under the circumstances, your analysis of the situation with Dana is probably
right...you might want to try getting some clear statement from her, although
that could be somewhat painful...  I guess she hasn't come to grips with the 
global effects of her actions.

Nothing useful happening at this end (at least at the moment...).

Steve

	(klein, con't)
∂ 6 Sep 1981 1539-PDT	<CSD.GREINER at SU-SCORE>	Recent actions
To: sklein at USC-ISIB
cc: greiner at RAND-AI

Well, I just returned from my IJCAI, and subsequent venture into beautiful,
charming, backland-campgrounds in British Columbia.  And now back to work:
(This is the prior message should have said.  Please delete that erroneous
version...)

Just what sorts of things have I been doing of-late:
I've been working out (a first pass at) a list of those additional values
which get passed to GetValue, PutValue and friends.
GetField and PutField will soon have a similiar list:

The third arg to GetValue - "other" in most functions - is an unordered list
(actually an FSet) whose elements may be:

  (FAST-CACHE s1 s2 ... sN)  -- this causes the atom Fast-Cache to be passed
	to CacheValue, on its "why" list, for each slot, si.
  (-CACHE s1 s2 ... sN)      --  tells the get-values NOT to cache the computed
	value of any slot si.
  (-COMPUTE s1 s2 ... sN)    -- the get-values will not bother computing the
	value of any slt si; if the value isn't stored, just forget it.
  (IGNORE-CACHE s1 s2 ... sN) -- the get-values will NOT use the stored value
	of any slot si -- but rather will compute those values as needed.
  (SAFESLOT s1 s2 ... sN) -- each si really is a slot; so don't bother to 
	confirm this.
  (SAFEUNIT u1 u2 ... uN) -- each ui is really a unit.
---
[Note I am trying to adopt the convention that binary conditions be indicated
 by using some name, prefixed by + or -, depending on sense.  In general only
 one form (eg either +←←← or -←←←) will be necessary, as the other sense is
 the overall default.  For example, +CACHE is superfluous.]
---
In addition, any of these elements can be a single atom -- one of that
{FAST-CACHE -CACHE -COMPUTE IGNORE-CACHE SAFESLOT SAFEUNIT} list.
In the first 4 cases, this means the implied action will happen to every slot.
An atomic SAFE←←←← applies only to the current slot or unit.
(This might be wrong; but it did save CONS cells for the standard cases.)

I reserve the right to further elaborate this convention to suit my whims
at any later date.  For example, one may eventually want to be more specific
in determining which slot's values to, eg, ignore -- as in
   (GetValue 'Fred 'Friends '((IGNORE-CACHE AllExamples (AnyFrog AllIsas)))),
which means the cached values as U:AllExamples will be ignored for all
units U, but that V:AllIsas will be accepted EXCEPT WHEN V=AnyFrog.
I cuurently have no use for such a "feature" - do you?
Another direction may be to have forms which are evaluated during the call,
will appropriate bindings --
  (GetValue 'Fred 'Friends '((IGNORE-CACHE =Fn fn#37))),
where this fn#37 will be applied to the unit and slot being considered at
each (recursive) call to GetValue; and its values would be used as the set
of slots whose cached values should be ignored.  A slight variation of this
would be something like (... ((IGNORE-CACHE =Pred= pred#82))), where pred#82
would be a predicate whose nonNIL response meant the argument should be
"ignore-cached".  Once again, this sledge hammer may not ever be really needed,
but it has been considered.

Final comments:
(i) SAFE and CONSTANTSLOT (AND MAYBE FAST-GET) have followed the dodo
	into extinction -- there were never really used, and I now
	realize they were never even needed.
(ii) The "VERY" of VERYSAFESLOT and VERYSAFEUNIT was dropped as superfluous.
(iii) I'm sure I will need more of these values; but am waiting for a forcing
	example before implementing and documenting those options.
       [Examples: (USE-VALUE (u1 s1 val1) ... (uN sN vN)) meaning "pretend"
	the value of ui:si is really vali -- don't bother to compute it.
	There's also some hassles when dealing with those *DO* special 
	values -- should they be treated as simple "syntactic" values, or
	"evaluated" -- ie how do I store the "value" (*DO* FSeeUnit SofU)
	as U:S?  As I said, more on this as this comes important -- unless
	you've some insights on this whole can of worms.]
-------

Onto the putting functions.  I should warn you that I now think that there
is at least one fatal problem with this overall specification approach,
which I'll convey after presenting this previously-thought-correct spec.

Anyway, again the final argument is a set of zero or more elements,
each of the form
	[These apply to any of PutValue, AddValue, DeleteValue, SubstValue]
  -VERIFY -- there is no need to verify that this value is appropriate, or
	that this slot belongs on this unit.  (Yes, this may indeed be 
	confusing two distinct functions.  Eventually I worry about this,
	if I have to.)
  -INVERSES -- do NOT now add on inverse links (this is useful when this
	particular PutValue was itself adding backpointers.  If not for this
	facility that process would always lead to an infinite loop...)
  -DEPENDENCIES -- do NOT do the other miscellaneous KB updates which result
	from this modification.

	[This only applies to PutValue]
  +ALWAYS-UPDATE -- go thru the motion of adding inverse links, and other
	after-put-value functions after performing an update -- even if the 
	value seems NOT to have changed. (Ie pretend the old value was really
	RecomputeMe.)  This is needed to handle the case of unit 
	initialization, when values are first simply UA-PUTVALUEd onto the 
	unit, and later have to be actually PutValue-d.

	[These only apply to AddValue, DeleteValue, & SubstValue]
  +COMPUTE-INITIAL -- What should you do when you've been told to add on a
	new value, V, onto U:S when there is no value of U:S?
	There seem two possibilities:
	(1) do everything you can to compute the value of U:S,
	   and then add on V.
	(2) simply go on, (leaving U:S uncomputed) with the assurance that
	   any one from now on who wants
	   to find the value of U:S will specifically ask for it, using 
	   GetValue; which will now have to compute it.
	   The asssumption is that S:ToCompute will now catch this new V.
	Anyway, it turns out that both of these cases come up -- hence this
	extra parameter.
	[Note I believe the current programs will always compute the value if 
	the slot is primitive -- as this means the value is NoEntry or 
	NoEntries, depending on the format of the slot.  This is probably 
	the wrong approach...]
  N-Values -- In general one wants to add on just one value, V, to a value of
	U:S.  However there are times one may want to add a slew of {Vi} at
	once.  The purpose of this value is to distinguish these cases.
	Note this is well defined for both AddValue and DeleteValue; but
	may lead to confusion for SubstValue, if we want to replace N values
	with M values, when N <> M.  Of course we may simply bar this operation
	in general.

-------
Sounds good?  Well, there is a problem:
Why should PutValue need to know anything about adding inverses?  I'll
agree that DefaultPutValue should, but things at this level should be totally
invisible to the general user-level functions.  It should be ↓MkMMS
SK]h4∃i↑AQKYXAAki-C1kJAi!ChAo∀ACeJ↓]←nA¬IIS]≥∪]mKIgKfX↓C]HA9←iQS9NA[←IJ\~∃QQJAMU]GiS=]fAo!SGPAAki-C1kJAG¬YYfX↓gkGP↓CfA	∃MCkYQ!ki-¬YkJX↓gQ←k1H~∃]=nAS]→KdAi!ChAi!SfA[∃C]fA9←hAi<ACIH↓S]mKIgJAa=S]iKIfAi↑↓iQKg∀X@\\8~∃'↑↓iQSf↓gKK[LAi↑A%[aYr↓∩AgQ=kYHA≥↑AEC
VAi↑↓iQJA∃CeYS∃dAG←9mK]i%←\XA]QSGP4∃gi←IKHAm¬YkKf↓YSWJ↓βII∪9mKeg∀AS\AQQChA∃qieB↓CeOk5K]h\4∀~∃∩↓]←nA9KKHA∧AiCE1JAoQ%GPAe∃YCiKLAiQ←MJAaCIC[Ki∃efAo%iPAo!ChAi!KrAe∃CYYr4∃[KC8@ZZ~(∩∪-KISMr}$∪∪]m∃egJ}%	KaK9IK]G%Kf}~)≥Kn[U]Sh∩@V@@$∩@@V4∃↔∧[
←]gSMiK]Gd∩∩∩∩$@@V~)βII∪9mKeg∀∩∩∩∩$@@V~)	KYKQK∪]m∃egJ∩$∩∩∩@V~∃%∃[←mS9O
←e∃SO]KIf∩∩∩$@@V~)+]SiIK]C[∃H∩∩∩$∩@@V4∃+]SQ	KYKQKH∩∩$∩∩@@,~∀yI∃MCkYP|∩@@,∩∩@@,∩∩@@,~∀~∀4∃)QSLAG←]YKegS=\Ao←UYHA]=nAiC-JAaY¬GJAS8A	KM¬kYi!Ui-CYUJ@ZZ↓C]HA∃CGPA→k]Gi%←\~∃%hAGC1Yf@Q⊃KMCk1i???Aki-C1kJXA]QKeJ↓??>A%\Aw¬∃M←eJ↓βGik¬XAβMQKe|R↓o←kY⊂@~∃Q¬mJAo!ChASPA]KK⊃fAi↑↓aKeM=eZAi!JACaPACGi%←\\~(Q'S[%YCeYdAM←d↓	KMCUYiβI⊃-CYk∀X@\\9	KYKQJ\\\↓C]H@8\]'k	gh\\8@\R~(~∀ZZ4ZZZZ4∃∪[a1K[K]QCiS←8t~∃βLA∩AW∃K`AG!C]OS9NA[r↓aYC]LAS\A5SH[S5aYK[∃]iCi%←\XA9←]JA=LAiQ∃gJAG!C]OKLACeJ4∃sKh↓i←iC1YrAI=]J\@↓⊃←aK→kYYr↓i←ICdAC]H↓i←[←Ie←nA]SYXA	JAgk→MSGS∃]hAi<AKSi!Kd@~)OKhA∃mKesQQS]N↓[K]i%←]KH↓QKeJ↓i↑AC
ikCY1rAo←IVXA←HAi↑A→S]HA]QrACIJAI←=[KHAQ↑@~∃→CSYkIJ\@A9←iJA$AQCm∀A[CI∀AiQJ↓Caae=aeSCQJ@Q←HAS]CAae←aISCiJ|RAGQ¬]OKf↓i↑~∃¬YXA←_AiQJ↓k]SiL@ZZAUgS]N↓≠βπL@Q]←\A[rAIKGK]PA≠β
&Ack∃giS←8Aae←	CEYr↓[CWKL~∃[←IJAgK9gJ\\8R~∀~(ZZZZ4ZZ~∃$ACYg<AGQC9OKHA∧AMKn↓←iQKHAiQS9OftA9Ko!←MgSEY∃'Y←iLASfA9←nA≠e≥Ko!=ggSE1K'Y←QfX~∃]QSGP↓ShAg!←kYH↓QCmJ↓EKK\↓CYXA¬Y←]N8@AβYM↑AiQ∀AmCYUJA←L↓BAk]%hOfA5sπeK¬i←d~)SfA]=nABAU]ShX↓eCiQ∃dAiQ¬\ABAMieS]≤\~∃β1XA←L↓iQKg∀ACeJ↓eKG←IIKHA%\AiQ∀AmCe%←kfA→SYKf↓←\A7IC]H[¬S:y∂I∪≥H]%→_xX~∃←_AG←kIgJ\@↓→KhA5JAGQ∃GVAi!KZA←UhXAE∃M←eJ↓s←jA	eS]N↓iQKZ↓←mKd↓i↑A7%'∪¬:8~∀~∀4ZZZZ4Z~∃β9←iQKHAckKMiS←\hA	SH↓s←jA∃mKdA⊃SgG←YKdAo!rA]↑↓←]JA
C\AY=NAS]Q↑A≠β9π∨~]I→_}~))↑Ag∃JAoQ¬hAg←IhA←L↓gikM_As←j≥mJAE∃K\Ao=eWS]≤A←\AIKGK]QYrXA$OmJAQeSKH↓i↑~∃∃qC[S9JAUkMhAoQ¬hA]K\Agik→LAQCLAEKK8AIKa=gSiK⊂AS\A5β≥π∨4]%→_l~∃C]⊂AM←k9HAiQ%fAG←UYHA←9YrAE∀ACGG=[aYSMQKHA%LA∩A1←OOK⊂~∃S\↓CfAs=j@ZZ↓oQSG A∩AI∃GSIK⊂AoCf↓k]Ki!SGCX0ACMi∃dAI←%]NA←9GJ\~)→KhA5JAW]=n@Pb$ASLAe←jAo¬]hA[∀Ai↑A1←←VA=mKdAe←kdAMQ←kY⊃Kef@!eKCHhAgar$A←\~)s←jA]←eVX↓C]HX↓SLAg<X@Pd$AQ←n↓∩AGC8AOKh↓CGGKMfAi↑↓+'ε[%'∪∧\4∀~∀Z4ZZZZ4~∃m∃]ikC1YrA∩↓OKhA¬e←k]⊂Ai↑A→S]Sg!S]NAU`AiQ∀A
'K∃+]Sh↓gikM_XAC]⊂AiQJ↓gikM_AM←d4∃%C]⊂XAC]⊂XAa←MgSEYdXAiQ∃gSfAMikML0AC]H\\\~(~∃)C-JAGCIJX~∃Ikgf~(ZZZZ4ZZ~∀@@@@@@@@@@@@ZZZZ4ZZZZ4ZZZZ4~∀ZZ4ZZZZ4∀~∀≡nA'K@@brpD@ddf\[!	(%∂%∪9$∩∪
keeK9hAka⊃CiKf4∃)↑t↓gWYK%\ACh↓+'ε[%'∪∧~)GFtA≥eKS]∃$~∀~)')-∀@Z~∀%∩A'!∃≥(Aα↓/⊃∪→∀A)∨	¬2A⊃∨9∪≥∞AQ⊃
A'Aπ∪
%πβ)∪=≥&A
=$A)⊃='
~∃∃1)%α↓β%∂+5≥)&8@A)⊃∀A	∨πU≠≥)¬)∪∨≤0A/⊃∪
⊂A≠∨I
A∨$↓→'&↓π∨%%∃'!∨≥⊃&A)≡4∃)⊃
↓π+%%∃≥(Aπ=	
XAI'∪	∃&A∪≤↓7%β≥⊂[β∪:q∂%∪9$]%1_⎇'!∃π&@Z4A3∨*↓≠∪∂⊃P~∃β&↓/→_↓'≥β%_A)⊃∪LA≠∨%∀A%π∃≥(A!%π
AQ≡A1¬≠∪≥βQ∪∨≤X↓'!
∪β→→dA∪Ae∨*O-∀@~∃≥=(A%¬λA)⊃¬(A→βM(A∨!U&A≠β≥≥+&\4∀~∀∪¬&A'+≥∂')∃λXA∩↓≠β≥⊃%λ↓β¬∨+PA7∪'%¬:A¬%→∪HXA)≡↓'
A]⊃β(A$~∃π∨U→λA'∃
\@@!∂∨λX↓β~A∩↓≥∨'2∧@Q≥∨M∪
}R$@Aβ≥e/β2X4∀V@A¬	-∪'%≥∞A∂
∂β∞AM≠&↓β≤A∪9)%M)∪≥∞↓β!!%=βπ⊂\8\@@~(V@A'Aβ↔∪9∞Aβ&↓'∨≠=≥
A/!≡O&A	≤A	+%≥⊂A¬2A≥∪-∪≥≤A!%∪8bA∨≥12A∨≥∀Aβ%∂U≠≥(0~∃∩AIπ∨≠5≥λA¬→/β3LA∂∪-%≥∞A)!'
A]%∪)∪9∞A
+9π)∪∨9&A)⊃∃∪$A%∃'!πQ∪-
A→∪≥β_~∃β%≥+≠≥Q&\@A$A!%M∨≥β→12A⊃βY
A
∨U≥λA1U)∪_OLA)%∪Y∪β_A1∪))→∀A/%∪Q→≥)Q2@~∃→β∪%→dA+'→+_vAQ⊃
A∨Q⊃$A9∪π
A
β≥	∪⊃β)
~)∪&A!IS]i∨Uh\@@ xZAo!←←afZA∩AQQ←kO!hA=1y*Ao←UYHAkAaKd[
CgJAQQJAGUeeK]PAo←e⊂\~∃∩↓]←nAIKCYSiJASh↓+πfAQQJAK9iSeJ↓eKOS=\\@A]QrAI=Kg\OPA≠β
&AQCYJAB@4∀Ek]⊃↑AoQ¬hA∩A)kghA%]CIm∃eiC]QYrAI%HDAG=[[C]⊂}R@A$AioS⊃IYKH↓ [!→M(Ai↑↓kgJ~)!%∪≥Q∨+(v↓C]HA%hA]←\AgKK5fAi↑↓o←eV↓G←ee∃GiYr8@@Q/∀Aae←	CEYr↓gQ←k1HA[KIOJ~∃=kdAe∃gaKGQSmJAYKegS=]fA←_AiQSLAMk]
iS←\8R~∀VA
S]¬XAG←5[K]hhAiQ←MJ@T]Aβ∂
[I→_AM%YKfA¬eJA←9YrAkMCEYJ↓SLAi!JACgM←GSCQKH~∃I→_]a
AgsM←khA%fAgi%YXACI←k]H8~∃∨i!KeoSMJAs←TA[Cr↓CfAo∃YXAg¬mJAs=kegK1LAg←5JAga¬GJAC9HAIK1KiJAQQKZA]QK\~)ISga=gS]N↓←LAi!JAG←IeKga=]IS]≤Agsg=kh\~(~∃7¬dAiQJ↓oCrX↓iQJA¬YO←e%iQZA→←dAC	←eiS9NABAMKggS=\ASfh~∀∩Q$RA=π%]NA←UhA←L↓iQJA
keeK9hA∪]QKe→SM`AK]YSe←]5K]hX4∀∩QS$RAGY=gS]N↓MSYKLACfA9KGKgMCerX4∀∩QS%RRA]=iS]N↓iQJA∃qiK]QS←]f↓←LAi!JAmCIS←kfT]!β≥
AMS1KfXA	KM←e∀~∀∩Q%lRAI∃YKiS9NAiQ=gJ@T9!β∂
↓MSYKLXAiQ∃\~∀∩!lRAe∃]C[S9N@T]Aβ∂
[I→_Ai<AEJ@(]!β∂∀AMSY∃fXA/%)⊂Ai!JAKqQK]iS=]f~∀$∪s←j↓]←iK⊂AECG,A←\@!SSRR0AC]H↓MS]C1Yr~∀$QmRR↓eKK]QKeeS9NAiQ¬hA%→0]1
↓gsg←Uh\~∀↓:~∀~)β]so¬rXAI<AgK]⊂A[JAe←kdA%[ae←YK[K]Qf←gk≥OKgi%←]f←
eSiS
Sg[f0AKiF0~∃g←=]KdAICiQKHAiQC8AYCi∃d\@A$OHAY%WJAi<AgiCIhAGQ%gYS]≤~∃S]Q↑AOe¬]SiJ0AeCi!KdAi!C\AG=]iS]UJAgGUYaiS9NAS\↓Y←n[QSIJAMC]H\4∃βYg<AaYK¬gJAg∃]HAC1←]NA=iQKd↓ckKgQS←]fZZAS8AaCeQSGkY¬dAiQ¬hAYSMhA←L~∃gi%YX[i<[EJ[⊃←Gk[∃]iKH↓k]SiL\~∀~(ZZZZ4~∃≠¬π&t@↓∩AG←ASKHAQQJ@EQS[JA=]YrD↓G←[[¬]HAMI←ZAs=kdA5βπ&]%≥∪(A→SYJ\@~∃
IKKS]≤Ak`AQQChAMaCGJ↓QKYaLAi↑AIKCHAQQJAY=]NAM%YK]C5KfA∩↓G←]gQC]iYd~∃gK∃ZAi↑↓EJAK⊃SiiS9NvAC9HAEKMSIKf0AC]sQS[JA$AI←\≥hAKm∃\AW]=nAoQ¬hAICdASh~)Sf\\8@A/SQPAiQ∀AgC[∀AO←C0AS\A5S]HX↓SfAi!KeJAM←[Ko¬rAi↑↓eK[←YJAiQ∀@~∃Y∃MhAG=e]Kd≥f@lAMkaKe→Yk←kLAGQCacters: "EMACS "?

Next: why is it the first time I use EMACS in a session it appears unable to
find the filename I give it?  Ie EMACS tells me I'm now editing a new file,
even though I gave it a good file name -- one which it finds when I then
read it in using ↑X↑V.  Any ideas?

Back to FSeeUnit -- well, first a complete DEMO, and then FSeeUnit --
actually, first that complete DEMO, then some timely Rand stuff, and then ...
-- no, first DEMO, then thesis proposal, then FSeeUnit... -- oops, 
what about MACROs?  oye.

Russ

Ahh, I can hear the dreaded malathion-laden helicopers overhead.
-------
                ---------------
-------

∂07-Sep-81  0006	Steve Klein <SKLEIN at USC-ISIB> 	congrats on resync 	congrats on resync   

welcome back to the world...i haven't digested your message yet.
short status until i formulate a longer one.  coming along nicely
on staring at pieces of the system...the basic problem of "acquiring"
your "mindset" in order to semi-justify / understand what goes on
when.  also testing my understanding by trying to feed stuff to other
people at the same time.  also made a bunch of "changes"/extensions to
some functions, but couldn't get new versions to compile, so just
accumulating deltas for the moment...i'll find out why you can't
login direct to mancom.rll, but feel free to log in to my account.
on other things, do you have access (know where to find) a manual
for emycin?  i didn't see one when i was up there, was wondering if
its possible to get hold of one...
i'll send you more status on world when i digest your msg on tues.
steve
-------

	(klein, con't)
∂TO SKLEIN 14:49 13-Sept
More than you ever wanted to know...
Steve -

I figured you may be wondering what I've been doing these days -- ie why
haven't I sent along a set of pointers to the promised RLL-with-subunits
systems.  Well, I've been piddling around.

In case you're interested, I'm sending along a lengthly description of
the latest "RLL glaring omission" which I've tried to plug.
(Actually, I'm really hoping you'll have some comments about all of this,
which will make it yet gooder.)

Turns out RLL needed a more general notion of inverses
-- of which Inverse is but a (useful) special case.
This will serve many functions in the current unit/slot/value
system, but may turn out to be superfluous when dealing with propositions.
Still it should serve as a lead-in to such systems.

So I created and merged in the PseudoInverse slot.
The value of S:PseudoInverse will be a list of elements of the form
(T f1 f2), where T is a slot, and f1, f2 are functions.
To illustrate the semantics of these values, consider the example
which motivated this.

The value of RLL.STATUS:Networks is a list of KBnames -- eg
(SLOTS LISPFNS EURISKO ...).
Corresponding to these entries is the value RLL, on the DependentNetworks slots
of each of SLOTS.STATUS, LISPFNS.STATUS and EURISKO.STATUS.
Note that RLL, SLOTS, LISPFNS and EURISKO are NOT units; and so we cannot
say that Networks:Inverse = DependentNetworks.
But we do want something quite similar 
-- ie adding the value FOO to RLL.STATUS should cause RLL to be added to
the DependentNetworks slots of FOO.STATUS.

Enter PseudoInverse:  We state the 
	Networks:PseudoInverse = ( (DependentNetworks ENSTATUS DESTATUS) ).
The various inverse updating mechanism know this means that for each value V
on U:Networks, the DependentNetworks slot of (ENSTATUS V U) will have a 
corresponding value: (DESTATUS U V).
[ENSTATUS takes a single argument, and PACKs on a ".STATUS" to its end;
while DESTATUS strips that ".STATUS" off its single arg.
Here we are just giving these functions an addition argument.]

Note that 
	DependentNetworks:PseudoInverse = ( (Networks ENSTATUS DESTATUS) ).
For the time being, (<= wierd expression, ain't it)
I am pretending that
	PseudoInverse:PseudoInverse = ( (PseudoInverse H1 H2) ).	(*)
where 
  (H1 y x) = (CAR y)
  (H2 x y) = (CONS x (CDR y))

[Consider what this means:
 Spse S:PseudoInverse = ( (T f1 f2) ).  This (*) statement means that the
PseudoInverse slot of the unit
H1[(T f1 f2) S] will include the value H2[S (T f1 f2)] -- ie
that T:PseudoInverse includes (S f1 f2).

That certainly works for the DependentNetworks/Networks and
PseudoInverse/PseudoInverse cases.
Realize that S:Inverse = T is just like saying
	S:PseudoInverse = ( (T IDENTITY IDENTITY) ) 
-- and this (*) rule works for these cases as well.

However, there are cases where (*) fails.
[Consider (f1 a b) = (CAR a) and (f2 b a) = (CONS b (PLUS (CDR a) 6)).
 In this silly example, we have Owns:PseudoInverse = ( (Possessor f1 f2) ).
 Now what should happen is
	Russ:Owns = ( (Shoes . 1) (Socks . 2) )
 implies
	Shoes:Possessor = ( (Russ . 7) )	and
	Socks:Possessor = ( (Russ . 8) ).

 If Possessor:PseudoInverse = ( (Owns f1 f2) ) for these same f1 and f2, then
	Socks:Possessor = ( (Russ . 8) )
 would force Russ:Owns to include (Socks . 14), in addition to its current
 (Socks . 2)!  Clearly for this example, we want
	Possessor:PseudoInverse = ( (Owns f1 f2') ),
 where (f2' b a) = (CONS b (MINUS (CDR a) 6)). ]

The problem is the H2 function.  It should be something like
  (H2 x y) = (LIST x (G1 (CADR y) (CADDR y)) (G2 (CADR y) (CADDR y)))

where (G1 f1 f2) returns a function c, such that	|
  U = (c (f2 U V) (f1 V U)),				|
and (G2 f1 f2) = d means				|
  V = (d (f1 V U) (f2 U V)).				|

<It's easy to confirm that 
 f2'[ (f1 V U) (f2 U V) ] = f2'[ (CAR V) (CONS U (PLUS (CDR V) 6)) ]
	= CONS[ (CAR V) 
	        (MINUS (CDR (CONS U (PLUS (CDR V) 6)))
		       6) ]
	= CONS[ (CAR V)
	        (MINUS (PLUS (CDR V) 6) 6) ]
	= CONS[ (CAR V) (CDR V) ]
	= V,
as desired. >

However, I've no idea how to construct that H2 function 
-- nor even how to automatically verify the condition marked by | above.
So for the time-being, I'll use the simpler H2 function, pretending that
this covers all the cases.

Anyway, another big win of this approach is that we can now accomodate
multiple inverse.
For example, we can now simultaneously indicate that
	John:Mother = Mary  =>  Mary:Child = (Fred, ...)
  &	John:Father = Fred  =>  Fred:Child = (Fred, ...).
Earlier we'd have run into problems as we could either state
that Child:Inverse = Mother, or Child:Inverse = Father, but NOT both.
Now we can state that
Child:PseudoInverse = ((Mother Identity Identity) (Father Identity Identity))
& Mother:PseudoInverse = ((Child Identity Identity)) 
& Father:PseudoInverse = ((Child Identity Identity)) .

[By the way, the existing mechanism for slot Format insures that this
inverting sort of stuff is distributed to each member of a list, set, ...]

Other changes:
	The value of a slot's KBUpdates slot is still a function, but now
this function has more responsibility -- it will do ALL the KB updates,
including the inverse sorts of things -- including those PseudoInverse things.

Also, those sub-unit things belong, I think, in a seperate KB,
soon to created and christened FIELDS.
We can decide later whether this should be included in the
nucleus or not.

My final comment answers MRG's objection to RLL's use of things like
	(Brother Russ (Miles Wiley))
rather than
	(Brother Russ (SET Miles Wiley))
Turns out that change is trivial -- requiring only that I make a small change
to the FnForxxxing slots of the various slot format units -- FSet, FList, FBag, ...
(Of course eventually this sort of change should be made on the
MultipleElements unit -- recall that MultipleElements is one of the format
characteristics.)

----
Comments, criticisms, major objections?

By the way, how is life in general?

Finally, I'll be a-Randing later this week.  Unfortunately it looks like
I'll be fairly busy throughout my stay, trying to get my part of this project
off the ground.  But I'll give you call if an opportunity arises.

Russ

∂14-Sep-81  1429	Steve Klein <SKLEIN at USC-ISIB> 	Re: More than you ever wanted to know...      
To: RDG at SU-AI

Greets--
This message will probably contain more than you ever wanted to respond to...
Backing up a ways, I see the need for something like the notion of

 ∂TO SKLEIN 17:46 21-Sept
Return comments
  *  My comments are prefaced by those silly "*"s -- but I'm sure you already
  *  deduced that...

"JustificationalSlots", perhaps a hierarchy, such that, somehow, a unit must
have some minimum set of JustificationalSlots to be well-formed.  A unit
should not have any existence unless it contains DIRECTLY some reason for that
existence.  At the moment, that info is diffuse and subject to modification
(via MyEssentialVirtualSlots), but generally the set of things like Descr,
HighLevelDefn, ToCompute, CVUsedBy, DefnUsedBy, LispFn, DerivedFrom,
SlotsUsedInBuilding, UsingFunctions, SlotsBuiltFrom, UseToGetSlots, anything
that contains a function, etc etc.  Many units seem to be missing
"definitional" content, thus heavily obscuring their reason for existence.
Unfortunately, this is all complaint and no solution, since it probably ties
in intimately with the general problem of constraints.
  *  Doug used to talk quite a bit about the "Defn" slot of a unit -- which
  *  basically merged together all of these definitional attributes.  I (at
  *  least initially) felt that HighLevelDefn would fill that role, 
  *  but I now agree that it doesn't -- at least in its current incarnation.
  *  Certainly for variables
  *  we have to specify which things they are defined as, and which are 
  *  simply assertions on this intensional object.
  *  But it's not clear to me whether this definitional/assertional dichotomy
  *  makes much sense for "constants".  IE is Steve "defined" by his hairlength
  *  and shoe color, or his gender and age, or ...

  *  Now maybe there is something to say about the Steve UNIT, defined as
  *  describing a constant object, and hence having ...  This is some meta
  *  type of fact; and I don't know how to go about saying anything about it.
  *  (In fact, such assertions might even be meta-meta-level.  Consider the
  *  question of whether the Steve unit is well-defined sans this
  *  Justification slot.)

What is your general view concerning negating the existence of a slot?  As
example, if AnyBird has a typical slot FlightSpeed, how to notate and 
resolve that this slot is not relevant to Penguins.
  *  Never thought about that -- but you do have a good point. This points
  *  to yet another of RLL's incompletenesses.

  *  One could concoct a quick and dirty solution, which basically relies on
  *  a "NotMeaningfulHere" constant to serve this function.  
  *  This value would be stored on TypicalPenguin; and the FlightSpeed:ToGetValue
  *  function would "know" this meant Penguins lacked this FlightSpeed
  *  characteristic.

  *  Another solution is based on the realization that our MakesSenseFor
  *  friend is simply a shorthand to facilitate communication with the more
  *  general slot, DomainType; which is quite nice for many special cases 
  *  -- just like the connection between DataRange and RangeType.
  *  One could give FlightSpeed:DomainType the value
  * (FListN (UnitType (L-AND (*P AnyBird) (L-NOT (*P AnyPenguin))))
  *	    UnrestrictedType)
  *  or
  * (FListN (UnitType (L-AND (*P AnyBird) (*MembSlotVal BirdCharacter Flighty)))
  *	    UnrestrictedType)
  *  where Penguin#35:BirdCharacter does NOT include Flighty, whereis the value
  *  of this slot for most birds does.
  *  [feel free to ignore the enclosing (FListN ... UnrestrictedType), for now.]
  *  Anyway, it is this DomainType slot which is checked when asking whether
  *  FlightSpeed(x) is meaningful -- and here we would find it is not.
  *  Note that this DomainType specification would (or at least should) push 
  *  TypicalBird into FlightSpeed:MakesSenseFor,
  *  which is only sorta what we really want. Oh well...

  *  There are a bunch of people who have had their hands in this pie
  *  recently -- like Brachman (see "I lied about the trees"), Fahlman
  *  (see "Cancellation in a Paralle Semantic Network"), and Mark Fox
  *  ("On Inheritance in Knowledge Representation").
  *  (Some of the now old-ish stuff by Sussman, Doyle/McDermott and Reiter on
  *  dependency and multiple inheritance addresses some of these issues as well.)

  *  Anyway, I strongly agree with these papers in insisting that such information
  *  be explicit (but Im sure you'd guess that would be my position, based on
  *  RLL's basic design objectives); but it's still not clear what the 
  *  best (or even what acceptable) approaches really are.
  *  I'd love to hear any solution to this problem you have...

NittyGritty: Interlisp seems to have this interesting property that when the
directory under which a file was created is different from the directory in
which the file is residing, then prettyprinting any functions from that file
causes that function to be marked as changed ("can't find <mumble>---, loading
from <blarf>---").  Needless to say, since all the RLL files were made on one
of your machines, looking at their fns causes havoc with the filepackage's
beliefs concerning the world.  Any thoughts/solutions/pointers?
  *  Finally a question I can answer!
  *  Use the function CHANGE-SYSTEM, on XUTIL (or was it XUTILM?).  I think
  *  this will do the job.  Note you need to use this for (eventual)
  *  MAKEFILEing of the various files -- which I think is done automatically
  *  by some advise to MAKEFILE.

wrt oTHERs type stuff...it seems to me that the more complex these
specifications get, the more that must be known about the full context
of a GetValue  =>  non- locality/granularity of representation,  encouraging
"monolithic" optimization (refers to preds, functions, use-value forms).
I can definitely see how they could help, but also forsee pitfalls.
  *  I too anticipate a great many problems with any list I might construct.
  *  My current objective is basically to enumerate these values, and indicate
  *  (my expectations for) their current semantics.
  *  Ideally I would like for these values to be strongly "implementation
  *  independent", in the sense that they make no (strong) assumptions
  *  about what the x:ToGetValue functions really do.  Likewise for the
  *  why values wrt x:ToPutValue functions.

*Do* stuff...I don't know exactly how you would store one of these values
EXCEPT as the syntactic string (maybe I misunderstand...). I'll await
clarification.
  |      There's also some hassles when dealing with those *DO* special 
  |      values -- should they be treated as simple "syntactic" values, or
  |      "evaluated" -- ie how do I store the "value" (*DO* FSeeUnit SofU)
  |      as U:S?  As I said, more on this as this comes important -- unless
  |      you've some insights on this whole can of worms.]

  *  Oh, the point here was that typing (something like)
  *   (PutField U S F V)  will actually store (*Do* FSeeUnit SofU) on U:S.
  *  Should the user have "permission" to store such a value?
  *  Or what should the user actually put a value like 
  * (*Do* FExecute (LAMBDA (u s o) (...))
  *  on, say, TypicalX:SlotY?
  *  Note that the standard process for verifying the value fail here...
  *  Similarly what is the "real" value of TypicalX:SlotY?  That 3-element
  *  list, or the value of that final function, applied to TypicalX, .. or what?
  *  It gets even messier when you want to add on a value to this TypicalX:SlotY,
  *  etc.  Anyway, I've just sorta hacked around a bit, to get system which
  *  seems to work for most of my applications... But I'm by-no-means happy
  *  with it.

Advising GCGAG doesn't get anywhere, since fn does "pokes" to somewhere,
rather than being an active participant in GCing.
  *  Did you find that function?

If you do an Emacs ↑X↑U (uppercase region), it can be undone by M-X Undo,
if you actually haven't seen this, it usually will fix region deletions and
such things too.
  *  Thanks.

Given your defn of aborting an RLL session, I shall take it upon myself
(unless some reason not to) to write a suitable abort function.
  *  In what language?  Do you mean some DO or MIK file, to used after you've
  *  ↑Ced out of LISP?  Or some LISP function, which does all the necessary
  *  running around within LISP, and then LOGOUTs, inserting the appropriate
  *  name in the buffer; or ... ?

I don't think I ever found out from you what you were doing at Rand...
except associated with ROSIE (as I recall)...what's the status of your
contribution, and what's the status of ROSIE in general (I seem to recall
claims of "releasing" it at some point, whatever that means).
  *  No, that ROSIE thing was a one-shot thing a while back. 
  *  As best I understand, Henry Sowizral (HENRY@Rand-Ai), is now "in charge"
  *  of ROSIE.  He plans to add considerable featues to it, some along
  *  the RLL-ish lines of facilitating the modification of ROSIE itself using
  *  itself (ie the ROSIE input language).  We'll see.

  *  I'm actually working on the "Planner Workbench" project.
  *  RLL will be used, in the initial implementation, as nothing more
  *  than a DB management tool.
  *  Actually, their notion of the final system represents, to me, a good
  *  place to start serious research.
  *  So, for now, I'm in a position of addiog a few new bells and whistles to
  *  RLL, to get it handle this task. (Yawn)  Eventually Keith Wescourt (and
  *  perhaps Rick Hayes-Roth) will be sufficiently indoctrinated into RLL's
  *  ideas and workings that I can leave them to play with it, freeing me
  *  to do thesis sorts of things (but remaining on-call, for bug fixes, and
  *  perhaps commenting on their proposals, etc.)

more EMACS, if you remove the string "EMACS " from the mode line, then
all the mode line stuff croaks (I tried it for you...).  Several parts of
the package use absolute char locations and some seem to WANT that string
at the front...feel free to modify the relevant code (yuk, yuk).
  *  Oh well, thanks for trying... I'll stick to E, on the (relatively) huge
  *  DataDisc's.

I tried to reproduce your emacs file-not-found error, but both "emacs file"
and "ed file" came up with the file (as long as file is fully enough
specified..."ed" does completion on <esc>, of course, while "emacs" doesn't).
  *  Well, it does keep happening to me.  I'll soon send you a full scenario
  *  to play with...

<MANCOM.RLL> is now log-in-able.  Seems you have to ask the system types
to make changes to the accounting crud, rather than this property being
inherited from the superior directory (such stupidities in the world).
  *  Just another way these higher-ups justify their continued existence in the
  *  world; and of continuing their affliction of maximum misery to all involved...

Did you have a chance to look for an EMYCIN manual (or know where I can
ask for one)?
  *  I did indeed look around; and found myself threatened with various
  *  unspeakable bodily-harm type punishments if I dare to bring up this
  *  sore point again.
  *  It seems that manual is "almost done" (as in "your check is in the mail") --
  *  and will be deliverable just after these "last few updates and additions"
  *  are incorporated... Where have I heard that before?  
  *  (oh, I was from my lips? whoops...)
  *  Anyway, they promised to tell me when; and I'll forward either that
  *  information, or the manual itself, as soon as I can.
  *  (If you want to nag as well, try CSD.BENNETT@SCORE and/or CSD.PEAIRS@SCORE.
  *  I don't think their thug-squads travel that far; and I assume you're
  *  responsible enough not to mention your source (ie poor, defenseless me)
  *  to them...)

Final-- answering your basic question.  I wasn't convinced by your argument
for PseudoInverse slots.  Rather than question your mechanism, let me
question the instances in which you want to invoke it.  
  -  what's wrong with having an RLL unit which represents the
    existence/essence of RLL...seems to be only an extension of the
    purpose of the current RLL.STATUS unit.  Doesn't this cause your
    objection to the use of the normal Inverse slot to go away?
	* Yes, in this particular instance.  (Actually there are some
	* potential implementation-level problems with that approach --
	* basically because CORLL twiddles the name, and possibly the
	* property list, of its atoms.)
	* However this example was not what really "forced" me into PseudoInverses.
	* Recall how artificial the IUseCVOf and IUseDefnOf slots seemed --
	* their only reason for existence was to force that inverse pointer,
	* the CVsUsedBy slot, to get a value.  The same might be said about
	* Datatype, which needs to be present for the IsTypeOf to get a value.

	* Not any more: we may regard CVsUsedBy and HighLevelDefn as
	* PseudoInverses, and avoid that intermediary IUseCVOf slot,
	* and its set of headaches, altogether.
	* There are in fact several slots in this category -- and it'll be
	* a real joy to find them start to disappear.
	* (Don't worry, I'll not go about doing this until AFTER more timely
	* things on my queue have been completed.)

  -  for multiple inverses, such as Child --> {Mother Father} I question 
    whether the proper relationship isn't  Child <--> Parents which IS
    conceptually one-to-one.   More generally, Inverses should be able
    to handle many-to-one situations as a normal course of events.
    Is there a specific reason for Inverse being single-valued?
    So far, I'm not familiar enough with expressing solutions in this 
    type of formalism to go any farther.
	* I'll grant one can regard Children <-> Parents as the natural
	* inverse relation -- in fact, it was only with such arguments that
	* I managed to live with the limitations associated with the 
	* single-valued Inverse functions.
	* Of course people (including myself) feel much more comfortable
	* claiming that 
	* Mother:Inverse = Child, & that Father:Inverse = Child 
	* as well.  So why should RLL keep them from this description?

	* Inverse's single-valued-ness is an historic accident.
	* Like many other RLL things, this convention began in the days
	* when Doug was designing EURISKO; it's just taken until now
	* to get around to improving on it.
	* This (perhaps misnamed) PseudoInverses is what Inverses should
	* have been all along.  Only, like DataRange or MakesSenseFor,
	* as the single Inverse value is so useful for most cases, it will
	* be left in...

On other matters, there be nothing happening...this consistent reporting
of nothing of note is discouraging, I wonder whether my existence is
proceeding downhill at the same rate as the rest of the world...
	* I know what you mean.  I've been spreading myself so thin that
	* I've not really "finished" anything in quite a while.  I do think
	* that headway has been made in each of my pursuits -- enough so
	* that "soon" a bunch of things will find themselves done.
	* (Include here Fields, Rand stuff, macros, SPECialization, ...)
	* Still this part here is frustrating.


Steve.
---

  *  Miscellanous comments:

  *  First, I'm hereby stopping those now-meaningly "  *  " prefaces.

Second, Tom and I bumped into Greg Gibbons at IJCAI.
He now works for Schlumberger, as a mathematician, in France.
His boss decided it was time for someone to learn about AI,
hence his trip.

Third, what is the implementation status there?  Until Bill's recent letter,
I'd thought you'se guys were still at a sufficiently early stage that
nothing was being coded -- and you were, collectively, exposing yourself
to RLL.  More on this will appear in my letter to Mann@ISIB.

Too-da-loo,
	Russ
∂22-Sep-81  1613	Steve Klein <SKLEIN at USC-ISIB> 	smaller response to previous msg    
To: RDG at SU-AI

Greets agin

interesting how things swell and then decay in lengths of messages...this one
is definitely towards the decayed end (either way).

On the Justificational stuff, I am pretty much in agreement with your
statements...extensional objects should probably be described by their usage,
rather than their creation.  Fairly close to your meta-level defns.  This
seems to be the "only" large pitfall.

On session abort, I wrote a LISP fn which (I think) correctly aborts a 
session (only when abort is your idea, not something like a crash), but
don't understand your reference to "inserting the appropriate name in the
buffer" at logout...something needs to be executed after quitting LISP? 
(or is this a suggestion for pre-loading exec cmds for, say, file
manipulation...).

Our current status.  A brief description.  The grammar which is the basis of
things operates by making choices about various aspects of the
utterance-to-be.  The way the whole system is organized is by putting
"choice-experts" at each point where a decision needs to be made.  The choice
expert makes its decision by asking questions of the "environment" --that area
of the world outside the grammar proper.  The questions are in the form of
pre-defined operators.  In the "grand scheme" the operators have the sole task
of accessing the KR (RLL) and formatting the resulting answers.  At the
moment, some 60-80 operators are defined (out of, perhaps, 200 or so to
eventually exist).  These operators, however, don't have a KR to muck around
in and instead just retrieve stored answers to questions or ask for help.  The
next task is to start defining the representation and implementing the
operators (one at a time) to really access the defined concepts/etc.
Consequently, the "threshold" of action revolves around getting this stuff
firmed up (as you have hoped for anyway...).  The general feeling is
eagerness, rather than desperation, since there are always things to work
on, but everything is soooo close now...

Otherwise, basically nothing new or interesting of note...I have this
feeling that the life of my car is growing limited (maybe just worrying...).
May the kiwi of happiness smile on your salt shaker.

Steve.
-------

∂22-Sep-81  1949	Steve Klein <SKLEIN at USC-ISIB> 	you rang   
To: RDG at SU-AI

hi again.  I lost a bunch of messages when our system crashed...if you 
zapped off anything today, I haven't seen it (ie please resend else consider
this message a noop)
steve.
-------

	(MANN at ISIB)
∂16-Sep-81  0447	MANN at USC-ISIB 	RLL progress     
To:   RDG at SAIL
cc:   SKLEIN

Russ:

I'm  trying  to  do  some fresh time estimates about how we can
make progress on the PENMAN code.  The grammar is coming  along
reasonably  well,  but I need to know better when we can resume
working on  the  representational  parts.   I'm  worrying  some
because  we've been on hold (but learning, of course) for about
a month now.

Could you give me an idea of how soon the fields implementation
will be done?  It would help.

Cheers.

Bill Mann
-------

∂TO MANN (CC SKLEIN) 18:06 21-Sept
Status
Oops, sorry -- I hadn't realized I was holding things up.  
As I've told Steve, finding and patching the thousands of
non-trivial cracks in RLL facade is a full time job; and I've been
guilty of doing perhaps too much of this, of late.
(I feel abit like that Dutch boy, trying to prevent a torrent
from escaping....)

To answer your question: I'm about one person-day away from implementing
a full working version of fields.
Most of this time will be devoted to testing --
finding the bugs in the algorithm I am now feel "positive" will work flawlessly.
The problem lies in finding that day.

I should mention I've been in this state essentially since Steve left here.
Three of the weeks have been split between conferences and vacation;
and the remaining time has been devoted to doing first Rand-related
stuff, and now new student orientation/advising chores.
In all cases the tasks have been timely, and should soon be behind me.
Anyway, I'll move this fields stuff above thesis-proposal writing on my agenda;
and hence should be able to work on it over this week-end,
barring terminal burn-out (in either sense).

I hope these delays haven't hurt your cause too much.  As usual, everything
just converged at once...

Ciao,
	Russ
∂TO SKLEIN@ISIB 10:06 28-Sept
Slippage
Damn these computers anyway.
I lost a full day Saturday, thanks to a combination of trouble at Rand-Ai,
and an earlier act of carelessness on my part.  Unfortunately, I was already
a bit behind my schedule -- my job on the student orientation committee
took about an order of magnitude more time than I had expected this last
week.

So... at this point the Field stuff is on the top of my still-to-do agenda
(as opposed to the just-completed stack).  I'll definitely get to it today,
and perhaps even finish it. You'll be posted.

Sorry about the delays.  I did want to assure youse guys that you've not
been abandoned; and that I have been making forward progress (basically
by clearing away other distractions).

Russ

PS How are things there? ... and how is your nervous breakdown coming?

∂28-Sep-81  1119	Steve Klein <SKLEIN at USC-ISIB> 	Re: Slippage    

Hi.
Don't feel too frazzled.  I've been beating my head against a wall for
several days now, converting our previous stuff from prop lists to the
record package...ten thousand picky details.  Consequently, haven't gotten
back to REAL work yet.  Time will tell on the breakdown front...I have to
decide whether to flush UCLA down a hole for a while (or forever).  
Persevere (the breakfast of masochists).
Steve.
-------

∂TO SKLEIN@ISIB 16:18 2-Oct
This and that...
Steve -

Well, I'm now in the final debugging stage of Fields.  As predicted,
it's taking about one solid day of hacking to get the last 10% to work.

So why aren't I working on it now?  Basically because I don't have any
solid blocks of time before this evening -- I hope to finish it up then.
I'd previously allocated the other night (30-Sept) to that task;
but found Rand-Ai uncooperative -- it was bouncing up and down all evening;
due, apparently, to power problems caused by the storm youse guys were
having then.

Anyway, rather than waste this morsel of time, here's the basic message
I'd scheduled to write you upon completion of that overall task.

The KB FIELD holds the various miscellaneous sub-unit/field units, and
associated functions.  When it's all the way finished, I'll mail along
a dribble file showing it in operation.  Basically, it will
work as we had discussed:

Verification for all ComplexSlots, (such as Performers,)
is done by finding the function returned by a GetField call:
The value V may be stored on U:S only if V passes the test
administered by the function returned by (GetField U S 'VerifyAll).
[The verification function, in general, is (GetValue S 'VerifyAll), by the way.]

So how does GetField work?
As you guessed, it calls the function on F:ToGetField, which defaults
to DefaultGetField.  
A description of that function follows:
(GetField U S F oth) first checks to see if there is a subunit, on U:S.  
If so, it calls GetValue(SofU F), and returns that value.
(Here the F is treated as a slot, and the value of its ToGetValue slot
is used to do the work.  This may involve F:ToCompute, or anything else.)
Anyway, the more interesting case is when there is no such subunit.
Here the value of F:ToComputeField is used.  This function is applied
to all the arguments, and it is responsible for returning the value of
this call.  CacheField is then called, which uses the F:ToCacheField
function to (consider) storing that newly computed value.

The default field computer, DefaultFieldToCompute, does about what you'd
want:  It first gets the U:OrderedPrototypes, and walks along these
prototypes, searching for the first whose S value is a subunit
which has an F field.  Note the embedded GetField call uses the
others value of (-CreateSubUnit).  This tells DefaultGetField to stop
if there is no subunit.  (Note all the standard "others" values, used by the 
GetValue functions, are applicable.  And a few others - like this -CreateSubUnit,
and SAFEFIELD.  I reserve the right to expand this list as whims suit me.)

Anyway, if the value of any of these GetField calls IsOk, that value
is returned.  Otherwise, (GetValue S F) is called, and its value is returned.
[There is a possible optimization which could be made to that mapping --
it could stop at any prototype which is a member of S:MakesSenseFor.  
This exploits the fact that there will never be a TypicalThing:ToAddValue value,
much less a ToAddValueOfTypicalThing subunit, even though TypicalThing is
included on any slot's OrderedPrototypes.  This improvement/hack has NOT been 
added yet to DefaultFieldToCompute, because of the arbitrariness of the 
order of the U:OrderedPrototypes elements.  Ie the fact that one upward
branch has terminated does NOT imply the others have.  This would only mess
you up if there were more than one value on S:MakesSenseFor, and some class
descended from both of these -- both of which are rare occurances, but I
still didn't want to chance it...]

The current default DefaultCacheField function is pretty simple: it first
sees if the value of U:S is a subunit, and if so, UA-PUTPROPs the new value
on the F slot of this subunit.  Otherwise, if there is no such function, this
caching function does nothing.
[Of course more elaborate functions are possible: for example, you may want
to actual create a new subunit at this point, or whatever.
See the function FNewFieldUnit for possible insights into that creation process.]

Default functions for PutField (and maybe AddField and DeleteField) are now
being checked.  There are still a few small issues which I have to resolve:
like how to decide when to create a new sub-unit, what are accepted "why"
parameters, etc.

--- Problems ---
Well, that's the good news. Now for some of the problems.  Perhaps
you've some insights which will help solve them...

First, what the hell are SubUnits anyway?  What slots do they allow?
I earlier declared them to be intensional objects -- created to fill the
role of specifying the value of a slot in a particular unit.
Should they be allowed to serve other functions as well?

Basically each subunit looks a lot like a slot -- ie finding
GetField(U S F), when U is a member of S:MakesSenseFor, may end up evaulating
GetValue(S F) -- ie any slot which can be on a unit representing a slot can
(syntactically) be a field, apparently.  Plus others.

So I decide to make each subunit an element of the class of all slots;
(this was necessary when doing the type checking, to decide if the, say,
RangeType slot was defined for the PerformersOfTypicalObligaton subunit,)
and declared that any slot can be a field.
(That was simpler figuring out the set of all possible slots which might
ever appear on any unit which represents any slot -- ie the Union of all 
MySensibleSlots over all possible slots [or, equivalently, over all
typicalX's, where X is a subclass of slots.])
It seems inelegant not having an explicit list of these fields, but ...

This leads to the next problem -- as the same thing can be either
a slot and a field, it should have (implicitly at least) a pair of LispFn's.
[Descriminating between the cases can almost be done simply by examining
the number of arguments it has been given.  Unfortunately,
the case of two arguments is STILL ambiguous -- only resolved
when that 2nd argument is evaluated:
Arg 1: <slot> a Unit	<field> a Unit
Arg 2: <slot> others	<field> a Slot
Arg 3: <slot> undefined	<field> others
-------

--- other things ---
PseudoInverse has come into existence, as promised.

The DefaultAfterPutValue function has been greatly simplified - with
more of the work now distributed to the slots themselves.

Terminating a session will be faster now -- KBs are only sometimes
de-virtual-slotted: only when they have to be compressed.  This is
now done at closing time, rather than when opened.
[DBL's laid-back philosophy, I realize now, was to let lots of things slip
thru the cracks during a session.  It was, therefore, essential that these
little problems be removed with some regularity -- hence the
regular RemoveVirtualSlots calls.  RLL is now much cleaner -- and whereas
there is still some slop, most virtual slots are up to date; and deserve
to stay around.  So now a KB will be "logically" compressed only when it is 
being "physically" compacted.]

Various small things have been added to the XUTIL* files -- nothing all
that interesting, but necessary when I found that Dave had ignored
my changes when making his, forcing me to redo my updates...

----
More later -- when I've some real results to announce.

Hope all is well with you.  I've been doing little but hacking the last
few days -- mostly for Rand, some for you at ISI, and the rest on general
improvements to RLL, further solidifying it.

Russ
∂TO SKLEIN (CC MANN) 15:48 12-Oct
Ta-daaa!

Finally that needed day!
I think RLL is ready for your perusal.  Still no guarantees, of course,
but there's now a version which seems to work over all of the examples I
threw at it.

Proposal:
One of the next messages is a long (about 1000 lines) dribble file, showing
the sort of stuff you asked for.  After looking through that, please
send me a message, telling me the sorts of other things you'd like to see.
These would then be demonstrated (or added...) -- either real time, with
you TALK linked to me, or in the form of a (perhaped cosmetically edited)
dribble file.

At that point you could send over your delta files, to be incorporated
into the basic [Rand-Ai] files.  These could then be FTPed to [ISIB].

Statement of Philosophy wrt FIELDs:
Everything dealing with FIELDs is stored in a seperate module -- so fields
are NOT integral in the basic RLL system.
(Actually this is what required most of the time -- making those changes
"undoable".)  Anyway, you will have to load in that FIELD kb when starting
a session.  (Of course this could be done automatically, once RLL learns
about SteveKlein...)

Caveats:
I figure now would be a good time to acquaint you with some of the other
fixes I've made to the RLL system over the last while, in case you get
bitten by any of them.  [Of course these should be totally transparent to you.]
A subsequent message, soon, will enumerate these.

Russ
∂TO SKLEIN 15:57 12-Oct
That dreaded Dribble File
-*-*- This is a composition of 3 dribble files, taken from sessions over
-*-*- the last two days, editted only to remove irrelevant (and potentially
-*-*- embarassing) typing.  My comments are prefaced by "-*-*-", as you might
-*-*- have guessed.

 ***  Am opening Dribble file: <GREINER.RLL>TRACE.OCT11.1 [11-Oct-81 17:29:01]
<GREINER.RLL>UTIL.COM.31

-*-*- Bunch of start up stuff, deleted out of courtesy to your eyes ---

10←START]
Am leaving the tracefile as NIL.

                   Welcome to RLL-1!
Reading in RLL now.
Opening knowledge base <GREINER.RLL>RLL.KB.19
Last read NIL
Last written 11-Oct-81 16:55:04
Copying from <GREINER.RLL>RLL.KB.19 to <GREINER.RLL>RLL.PAGE.1.


Last written by (GREINER  6-Oct-81 14:03:52)
Opening knowledge base <GREINER.RLL>LISPFNS.KB.18
Last read NIL
Last written 11-Oct-81 16:56:15
Copying from <GREINER.RLL>LISPFNS.KB.18 to <GREINER.RLL>LISPFNS.PAGE.1.


Last written by (GREINER 11-Oct-81 16:55:29)
Opening knowledge base <GREINER.RLL>SLOTS.KB.21
Last read NIL
Last written 11-Oct-81 16:53:48
Copying from <GREINER.RLL>SLOTS.KB.21 to <GREINER.RLL>SLOTS.PAGE.1.


Last written by (GREINER  6-Oct-81 14:00:59)
Opening knowledge base <GREINER.RLL>USERS.KB.18
Last read 11-Oct-81 13:44:57
Last written 11-Oct-81 16:54:21
Copying from <GREINER.RLL>USERS.KB.18 to <GREINER.RLL>USERS.PAGE.1.


Last written by (GREINER 11-Oct-81 16:54:04)
Openning the file RLL.
compiled on 11-Oct-81 17:06:35
FILE CREATED 11-Oct-81 17:06:16

-*-*- 8 ARRAY space GCs later -*-*-
-*-*- (I never figured out what in RLL requires all of this array space.) -*-*-

RLLCOMS
Loading in <GREINER.RLL>RLL.COM.10.
You are about to write on an external file.
Do you want to enter ReadOnly mode? no

-*-*- More GCs -*-*-

This kb, RLL is already connected to all of (USERS SLOTS LISPFNS RLL).
Do you wish to read in any Knowledge Bases? yes
Do you want to read in your usual (SPILL HEURS EURISKO)? no
Which Knowledge Bases do you want loaded in? 
   1 -- DEMO
   2 -- FIELD
   3 -- BIKE
   4 -- RATALE
   5 -- SPILL
   6 -- RESOL
   7 -- GENLINFO
   8 -- BIOLOGY
   9 -- SETS
   10 -- MATH
   11 -- NUMBER
   12 -- HEURS
   13 -- EURISKO
   14 -- OLD
Enter the numbers of the ones you wish to use: 1 2
Do you want these to be your usual KBs? no
Do you wish to use you standard openning options, (Y (N) NIL)? yes
Opening knowledge base <GREINER.RLL>DEMO.KB.4
Last read NIL
Last written 11-Oct-81 16:34:23
Am compressing DEMO.
Copying from <GREINER.RLL>DEMO.KB.4 to <GREINER.RLL>DEMO.PAGE.1.

collecting atom name characters
39, 551 free cells, 34 pages left

collecting arrays
715, 715 free cells, 33 pages left
Last written by (GREINER  6-Oct-81 13:22:41)
Openning the file DEMO.
FILE CREATED 29-Sep-81 21:30:00
DEMOCOMS
Loading in DEMO.
This kb, DEMO is already connected to all of (DEMO USERS SLOTS LISPFNS RLL).
Opening knowledge base <GREINER.RLL>FIELD.KB.4
Last read NIL
Last written 11-Oct-81 16:35:15
Am compressing FIELD.
Copying from <GREINER.RLL>FIELD.KB.4 to <GREINER.RLL>FIELD.PAGE.1.
Last written by (GREINER 11-Oct-81 16:35:03)
Openning the file FIELD.
compiled on 11-Oct-81 17:10:02
FILE CREATED 11-Oct-81 17:09:54

collecting arrays
697, 697 free cells, 33 pages left

collecting arrays
576, 576 free cells, 33 pages left

collecting arrays
187, 699 free cells, 32 pages left
FIELDCOMS
Loading in <GREINER.RLL>FIELD.COM.5.
This kb, FIELD is already connected to all of (FIELD DEMO USERS SLOTS LISPFNS 
RLL).
KBs loaded.
NIL
11←UF.NETWORKS
(<GREINER.RLL>FIELD.PAGE.1 <GREINER.RLL>DEMO.PAGE.1 <GREINER.RLL>USERS.PAGE.1 
  <GREINER.RLL>SLOTS.PAGE.1 <GREINER.RLL>LISPFNS.PAGE.1 <GREINER.RLL>RLL.PAGE.1)
12←SOS RUSS
Bye now.
(Just created the sysout <GREINER.RLL>RUSS.EXE.1)
It is now 11-Oct-81 17:34:54.
Closing DribbleFile <GREINER.RLL>TRACE.OCT11.1


-*-*-- HERE I ADDED ON THE NEXT DRIBBLEFILE -*-*-

 ***  Am opening Dribble file: <GREINER.RLL>TRACE.OCT12.1 [12-Oct-81 10:37:12]
Am leaving the tracefile as NIL.
The following KBs can now be opened: (<GREINER.RLL>FIELD.PAGE.1 
<GREINER.RLL>DEMO.PAGE.1 <GREINER.RLL>USERS.PAGE.1 <GREINER.RLL>SLOTS.PAGE.1 
<GREINER.RLL>LISPFNS.PAGE.1 <GREINER.RLL>RLL.PAGE.1)


Copied the network <GREINER.RLL>FIELD.PAGE.1 onto <CORE>FIELD.PAGE-RUSS.


Copied the network <GREINER.RLL>DEMO.PAGE.1 onto <CORE>DEMO.PAGE-RUSS.


Copied the network <GREINER.RLL>USERS.PAGE.1 onto <CORE>USERS.PAGE-RUSS.


Copied the network <GREINER.RLL>SLOTS.PAGE.1 onto <CORE>SLOTS.PAGE-RUSS.


Copied the network <GREINER.RLL>LISPFNS.PAGE.1 onto <CORE>LISPFNS.PAGE-RUSS.


Copied the network <GREINER.RLL>RLL.PAGE.1 onto <CORE>RLL.PAGE-RUSS.
NIL
-*-*- So, as you can tell, I've just started.  Note the KBs loaded include FIELD,
-*-*- which holds the sub unit stuff.  The DEMO kb houses the examples I'll work
-*-*- through.
13←RLL-LIST (DEMO]
(TypicalPoorPerson Momma IsaOfGeorge Possessions Daddy DEMO.STATUS Parents 
                   AnyPoorPerson PossessionsOfGeorge Frank Steve Moms Gender 
                   AnyPerson George TypicalPerson 
                   PossessionsOfTypicalPoorPerson)
14←DI(AnyPerson]
  AnyPerson  
         [[ TypicalPerson ]] 
           AnyPoorPerson   
                 [[ TypicalPoorPerson ]] 
                 ** George ** 
        The unit TypicalPoorPerson has already been shown
         ** Daddy ** 
         ** Momma ** 
         ** Steve ** 
         ** Frank ** 
    The unit TypicalPerson has already been shown
!DONE!
-*-*- I was using Possessions to make my point.  Here's what I've done: -*-*-
15←EU Possessions
edit
8*PPU
MyIsa   (AnySelfAwareUnit)
MyCreator       RussGreiner
MyTimeOfCreation        "29-Sep-81 21:56:06"
MyCreatedAs     (IExamples (AnyComplexSlot))
Isa     (AnyComplexSlot)
RangeType       (FListN IntegerType IntegerType)
MakesSenseFor   (TypicalPerson)
PseudoInverse   NoEntries
OrderedPrototypes       (TypicalComplexSlot TypicalComputableSlot TypicalSlot 
                                            TypicalUnitFn TypicalStorableFn 
                                            TypicalFunction TypicalProcess 
                                            TypicalConcreteThing TypicalThing)
AllIsas (AnyComplexSlot AnyComputableSlot AnySlot AnyUnitFunction AnyUnitListFn 
                        AnyStorableFn AnyFunction AnyProcess AnyConcreteThing 
                        Anything)
OrderForToInit  7
MyAllIsas       (AnySelfAwareUnit AnyUnit AnyConcreteThing Anything)
VerifyArgs      [LAMBDA (val)
                  (AND (NOT (IGREATERP (LENGTH val)
                                       2))
                       ([LAMBDA (xy)
                           (AND (Unitp xy)
                                (OR [MEMB (QUOTE AnyPerson)
                                          (GetValue xy (QUOTE AllIsas)
                                                    (QUOTE (SAFESLOT FAST-CACHE 
                                                                   FAST-GET]
                                    (MEMB (QUOTE AnyPerson)
                                          (GetValue xy (QUOTE MyAllIsas)
                                                    (QUOTE (SAFESLOT FAST-CACHE 
                                                                   FAST-GET]
                         (CAR (NTH val 1)))
                       T]
VerifyElement   [LAMBDA (un slt val sub xtra modif)
                  (AND [EVERY (COND
                                ((MEMB (QUOTE VerifyN)
                                       xtra)
                                  (LISTP val))
                                (T (ListIfOk val)))
                              (FUNCTION (LAMBDA (valu)
                                  (SOME [QUOTE ([LAMBDA (xy)
                                                   ([LAMBDA (x)
                                                       (FIXP x]
                                                     xy]
                                                 (LAMBDA (xy)
                                                   ([LAMBDA (x)
                                                       (FIXP x]
                                                     xy]
                                        (FUNCTION (LAMBDA (pd)
                                            (APPLY* pd valu]
                       modif]
Format  FListN
KBUpdates       [LAMBDA (uThisUnit uThisSlot new modif why)
                  (AND T T]
-*-*- Notice it is a AnyComplexSlot - this means the various accesses to this unit
-*-*- will use GetField (not GetValue) calls -- ie thru subunits when necessary.
-*-*- (Note, by the nature of DefaultFieldToCompute, if no there are no relevant
-*-*- subunits, GetValue will be called, on this Possessions unit.  We'll see this
-*-*- in detail later.
-*-*- Let's look at that unit:
9*p
(MyIsa (AnySelfAwareUnit) MyCreator RussGreiner MyTimeOfCreation 
"29-Sep-81 21:56:06" MyCreatedAs (IExamples &) Isa (AnyComplexSlot) RangeType (
FListN IntegerType IntegerType) MakesSenseFor (TypicalPerson) PseudoInverse 
NoEntries OrderedPrototypes (TypicalComplexSlot TypicalComputableSlot 
TypicalSlot TypicalUnitFn TypicalStorableFn TypicalFunction TypicalProcess 
TypicalConcreteThing TypicalThing) AllIsas (AnyComplexSlot AnyComputableSlot 
AnySlot AnyUnitFunction AnyUnitListFn AnyStorableFn AnyFunction AnyProcess 
AnyConcreteThing Anything) --)
9*10 p
(AnyComplexSlot)
10*EU
Editting the unit AnyComplexSlot.
edit
11*p
(MyIsa (AnySelfAwareUnit) MyCreator RussGreiner MyTimeOfCreation 
" 8-Aug-81 17:32:03" MyCreatedAs (ISubClass &) Isa (AnyClassOfObjects) 
TotalSoFar 0 SuperClass (AnyComputableSlot) TypicalExample TypicalComplexSlot 
UnitExamples (Possessions VerifyAll1 TypicalComplexSlot))
11*-3 p
TypicalComplexSlot
12*EU
Editting the unit TypicalComplexSlot.
edit
13*PPU
MyIsa   (AnyTypicalExample AnySelfAwareUnit)
MyCreator       RussGreiner
MyTimeOfCreation        " 8-Aug-81 17:40:30"
MyCreatedAs     (ITypEx (AnyComplexSlot))
Isa     (AnyComplexSlot)
MyNewPossibleSlots      NoEntries
TypicalExampleOf        AnyComplexSlot
Datatype        (NonNILType)
BeforePutValue  ComplexBPV
ActualPutValue  ComplexActualPV
ActualAddValue  ComplexActualAV
ActualDeleteValue       ComplexActualDV
ActualSubstValue        ComplexActualSV
-*-*- Two notes:
-*-*- 1. "Complex" prefixes these functions.
-*-*- 2. Note the absense of ToPutValue, ToGetValue, etc.:  
-*-*- 	The DefaultxxxValue functions are sufficiently general that they
-*-*-	will call these complex beasts at the correct time, (I think).
-*-*- Anyway, back to Possessions (next time I chose an example with fewer letters)
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACE.OCT12.1 [12-Oct-81 10:47:06]
14*ok
Nothing changed.
TypicalComplexSlot
15*ok
Nothing changed.
AnyComplexSlot
16*p
(AnyComplexSlot)
16*↑ f RangeType
18*p
... RangeType (FListN IntegerType IntegerType) MakesSenseFor (TypicalPerson) 
PseudoInverse NoEntries OrderedPrototypes (TypicalComplexSlot 
TypicalComputableSlot TypicalSlot TypicalUnitFn TypicalStorableFn 
TypicalFunction TypicalProcess TypicalConcreteThing TypicalThing) AllIsas (
AnyComplexSlot AnyComputableSlot AnySlot AnyUnitFunction AnyUnitListFn 
AnyStorableFn AnyFunction AnyProcess AnyConcreteThing Anything) OrderForToInit 7
 MyAllIsas (AnySelfAwareUnit AnyUnit AnyConcreteThing Anything) VerifyArgs (
LAMBDA & &) VerifyElement (LAMBDA & &) Format FListN --)
-*-*- Note this implies the value of any X:Possessions slot will be a pair of 
-*-*- integers.
18*ok
Nothing changed.
Possessions
17←EU AnyPerson
edit
19*f UnitE≠		; the ≠ character is really <esc>, by the way.
=UnitExamples
22*p
... UnitExamples (Daddy Momma Steve Frank TypicalPerson) SuperClass* (AnyPerson 
Anything))
22*ok
Nothing changed.
AnyPerson
18←EU Daddy
edit
23*p
(Isa (AnyPerson) MyIsa (AnySelfAwareUnit) MyCreator RussGreiner MyTimeOfCreation
 " 3-Oct-81 23:19:02" MyCreatedAs (ICopiedFrom &) Gender Male)
23*ok
Nothing changed.
Daddy
-*-*- Let's see:
19←(PutValue 'Daddy 'Possessions '(4 6 9]


   *****   
Unable to find (SAFESLOT):ToGetField. Perhaps (SAFESLOT) is not a unit?   ***** 
Break?  yes
Unable to find (SAFESLOT):ToGetField. Perhaps (SAFESLOT) is not a unit?
NIL

(ERROR broken)
-*-*- Oops - someone is passing the wrong arguments:
20:BT
ERROR
*PROG*LAM
Warning
GetAccessFn
GetField
DefaultFieldToComputeA0185
*PROG*LAM
MapUntilOk
DefaultFieldToCompute
DefaultGetField
GetField
ComplexVV
ComplexBPV
*PROG*LAM
DefaultPutValue
PutValue
**TOP**

21:ARGLIST(DefaultFieldToCompute]
(uN sL fLD oth)
22:BTFN DefaultFieldToCompute

   oth NIL
   fLD (SAFESLOT)
   sL Possessions
   *ARG1 Daddy
DefaultFieldToCompute
**TOP**

-*-*- BTFN is a macro which searches the stack for certain functions.
-*-*- I find it very useful.


-*-*- AND HERE IS THE THIRD DRIBBLE FILE -*-*-
-*-*- Explanation: the TIP went down, so I quickly (tried to)
-*-*- save everything I had.  Apparently I was successful...

 ***  Am opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [12-Oct-81 11:08:45]
Am leaving the tracefile as NIL.
The following KBs can now be opened: (<GREINER.RLL>FIELD.PAGE.1 
<GREINER.RLL>DEMO.PAGE.1 <GREINER.RLL>USERS.PAGE.1 <GREINER.RLL>SLOTS.PAGE.1 
<GREINER.RLL>LISPFNS.PAGE.1 <GREINER.RLL>RLL.PAGE.1)
None of the KBs were touched last session.
Do you still want to go ahead and copy some? no
NIL
24:uNoUnitPuts
T
-*-*- This variable is reset when the WS is "dirtied" -- when some unit
-*-*- is put of an external file.

-*-*- Anyway, on with the debugging:
27:BTFN GetField

   *ARG4 (-COMPUTE-FIELD -CreateSubUnit)
   *ARG3 (SAFESLOT)
   *ARG2 Possessions
   *ARG1 TypicalPerson
GetField

   *ARG4 (SAFESLOT)
   *ARG3 VerifyAll
   *ARG2 Possessions
   *ARG1 Daddy
GetField
**TOP**

28:REEVAL DefaultToComputeField T
I couldn't find any function named DefaultToComputeField.
29:REEVAL DefaultFieldToCompute T

(DefaultFieldToCompute broken)
30:?=
uN = Daddy
sL = Possessions
fLD = (SAFESLOT)
oth = NIL
31:BT
DefaultFieldToCompute
*ENV*
DefaultGetField
GetField
ComplexVV
ComplexBPV
*PROG*LAM
DefaultPutValue
PutValue
**TOP**

32:BTFN DefaultGetField

   *ARG4 (SAFESLOT)
   *ARG3 VerifyAll
   *ARG2 Possessions
   *ARG1 Daddy
DefaultGetField
**TOP**

33:REEVAL DefaultGetField T

(DefaultGetField broken)
-*-*- This must be the offending function, as its args are correct,
-*-*- but those to DtfFldTC were wrong
34:UB
(DefaultGetField)
35:!EDIT
Editting the function: DefaultGetField
loading from <GREINER.RLL>FIELD..7
prop 
edit
-*-*- Yes, that is another MACRO.
24*p
(LAMBDA (uNIT sLOT fIELD oTHER44)   **COMMENT**   (DECLARE & &) (CheckOther 
oTHER44 FIELD-OTHER) (PROG & & &))
24*-1 2 p
((PrimValue &) NewValue hold)
25*pp
((PrimValue (UA-GETPROP uNIT sLOT))
 NewValue hold)
25*INIT

collecting lists
12865, 12865 free cells, 29 pages left
Initialized (PrimValue NewValue hold)
26*e PrimValue
NIL
26*e uNIT
Daddy
26*e sLOT
Possessions
26*p
((PrimValue &) NewValue hold)
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 11:12:57]
26*nx p
(DECLARE (LOCALVARS PrimValue NewValue hold))
27*nx p
(RETURN (AND & & & &))
28*2 p
(AND (OR & &) (OR & &) (OR & &) (COND & & &))
29*2 pp
(OR (InOther (QUOTE SAFEUNIT)
             oTHER44 NIL uNIT)
    (Unitp uNIT))
29*nx nx p
(OR (InOther & oTHER44 uNIT sLOT) (Fieldp fIELD))
31*nx p
(COND (& &) (& NIL) (T & & NewValue))
32*2 1 p
(AND (FormattedValuep PrimValue) (EQ & &))
33*eval
NIL
34*!nx 1 p
(OR (InOther & oTHER44 uNIT sLOT) (InOther & oTHER44 uNIT sLOT))
36*pp
(OR (InOther (QUOTE -COMPUTE)
             oTHER44 uNIT sLOT)
    (InOther (QUOTE -COMPUTE-FIELD)
             oTHER44 uNIT sLOT))
36*e oTHER44
(SAFESLOT)
36*eval
NIL
37*0 p
((OR & &) NIL)
38*nx p
(T (SETQ NewValue &) (OR & & &) NewValue)
39*2 p
(SETQ NewValue (APPLY* & uNIT sLOT &))
40*pp
(SETQ NewValue (APPLY* (OR (GetValue fIELD (QUOTE ToComputeField)
                                     (AddOnCharacter (GetSlotCharacter oTHER44)
                                                     (QUOTE SAFESLOT)
                                                     NIL))
                           (Warning "Trouble - unable to find " fIELD ":"
                                    (QUOTE ToComputeField)
                                    " - in "
                                    (QUOTE DefaultActualGetField)
                                    "."))
                       uNIT sLOT (AddOnCharacter oTHER44 (QUOTE SAFESLOT)
                                                 NIL)))
40*-1 2 p
(OR (GetValue fIELD & &) (Warning "Trouble - unable to find " fIELD ":" & " - in "
 & "."))
40*eval
DefaultFieldToCompute
41*!EF
Editting the function DefaultFieldToCompute
Unbreak DefaultFieldToCompute? no
loading from <GREINER.RLL>FIELD..7
DefaultFieldToCompute unbroken.
prop 
edit
42*p
(LAMBDA (uN sL fLD oth)   **COMMENT**   (DECLARE & &)   **COMMENT**   (OR & &))
-*-*- I have some advice on EDITF, which asked above if it should first unbreak
-*-*- the function.  Turns out it doesn't work: BREAK(fn)
-*-*- will NOT actually break the function is fn is being edited -- and no
-*-*- one seems to know how BREAK decides the function is being editted.
-*-*- Anyway, that same advice will be useful at the end of this edit, when
-*-*- it will ask to rebreak this function.
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 11:16:34]
-*-*- One more check, just to make sure everything opened ok:
42*e (MAPCAR UF.NETWORKS 'HASHFILEP]
(#171115 #171123 #171131 #171137 #171145 #171153)
-*-*-  Popping back up:
42*p
(LAMBDA (uN sL fLD oth)   **COMMENT**   (DECLARE & &)   **COMMENT**   (OR & &))
42*-1 p
(OR (MapUntilOk & &) (GetValue sL fLD oth))
43*2 p
(MapUntilOk (IsOk &) (FUNCTION &))
43*pp
[MapUntilOk (IsOk (GetValue uN (QUOTE OrderedPrototypes)
                            (AddOnCharacter (GetSlotCharacter oth)
                                            (QUOTE (SAFESLOT FAST-CACHE))
                                            T)))
            (FUNCTION (LAMBDA (x)
                (DECLARE (LOCALVARS x)
                         (SPECVARS sL fLD oth))
                (GetField x sL fLD (AddOnCharacter oth (QUOTE (-CreateSubUnit
                                                                -COMPUTE-FIELD))
                                                   T]
43*↑ 4 p
(DECLARE (LOCALVARS uN) (SPECVARS oth fLD sL))
-*-*- Damn, this looks legit!
45*f GetField
46*?=
uNIT = x
sLOT = sL
fLD = fLD
other35 = (AddOnCharacter oth (QUOTE (-CreateSubUnit -COMPUTE-FIELD)) T)
47*redo F

GetField  ?
48*ok
not changed, so not unsaved
Rebreak DefaultFieldToCompute? yes
DefaultFieldToCompute
49*p
(OR (GetValue fIELD & &) (Warning "Trouble - unable to find " fIELD ":" & " - in "
 & "."))
49*nx p
uNIT
50*0 p
(APPLY* (OR & &) uNIT sLOT (AddOnCharacter oTHER44 & NIL))
-*-*- Aha - I decided NOT to pass the field-name here - just the way
-*-*- S:ToCompute takes only 2 arguments...
51*NAME
DefaultGetField
51*ok
not changed, so not unsaved
45:EU TypicalSlot
edit
52*f ToComputeField
53*p
... ToComputeField (*Do* FExecute &) SuperTypEx* (TypicalThing 
TypicalConcreteThing TypicalProcess TypicalFunction TypicalStorableFn 
TypicalUnitFn TypicalSlot) AllIsas (AnySlot AnyUnitFunction AnyUnitListFn 
AnyStorableFn AnyFunction AnyProcess AnyConcreteThing Anything) MyAllIsas (
AnyTypicalExample AnyIntensionalObject AnyAbstractThing AnySelfAwareUnit AnyUnit
 AnyConcreteThing Anything) OrderedPrototypes (TypicalSlot TypicalUnitFn 
TypicalStorableFn TypicalFunction TypicalProcess TypicalConcreteThing 
TypicalThing) ToAddField DefaultAddField ToDeleteField DefaultDeleteField 
ToSubstField DefaultSubstField)
53*2 p
(*Do* FExecute (LAMBDA & &))
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 11:19:30]
54*pp
[*Do* FExecute (LAMBDA (un sl ot)
        `(LAMBDA (unt sl oth)
          (DefaultFieldToCompute unt sl (QUOTE ,un)
                                 oth]
-*-*- This is ok.  The fault must lie with VerifyAll itself.
54*ok
Nothing changed.
TypicalSlot
46:EU VerifyAll
You are about to write on an external file.
So far, this core image has been used by (GREINER).
Do you want to enter ReadOnly mode? no

collecting lists
17303, 17303 free cells, 29 pages left
edit
55*e uNoUnitPuts
NIL
-*-*- ↑ that's the variable used to decide whether the WS is pure.
55*f ToCom≠
=ToCompute
56*redo F
=ToComputeField
57*p
... ToComputeField DefaultFieldToCompute OrderedPrototypes (
TypicalComputableSlot TypicalSlot TypicalUnitFn TypicalStorableFn 
TypicalFunction TypicalProcess TypicalConcreteThing TypicalThing) AllIsas (
AnyComputableSlot AnySlot AnyUnitFunction AnyUnaryFunction AnyUnitListFn 
AnyStorableFn AnyFunction AnyProcess AnyConcreteThing Anything))
57*:
:
-*-*- This will be inherited henceforth.
59*SP
Verifying slots
Using UA-PUTPROP, not full PutValue
VerifyAll
48:?=
uNIT = Daddy
sLOT = Possessions
fIELD = VerifyAll
oTHER44 = (SAFESLOT)
49:eval

   (DefaultFieldToCompute broken)
50:?=
uN = Daddy
sL = Possessions
fLD = VerifyAll
oth = (SAFESLOT)
-*-*- Ah, now it looks right.
51:UB
(DefaultFieldToCompute)
52:eval
   DefaultFieldToCompute evaluated
53:value
[LAMBDA (un sl val sub xtr modif)
        (AND [AND (NOT (IGREATERP (LENGTH val)
                                  2))
                  (FIXP (CAR (NTH val 1)))
                  (FIXP (CAR (NTH val 2]
             modif]
-*-*- Ok - so it wants two values, both integers - as desired.
54:ok
DefaultFieldToCompute
DefaultGetField evaluated
54:value
[LAMBDA (un sl val sub xtr modif)
        (AND [AND (NOT (IGREATERP (LENGTH val)
                                  2))
                  (FIXP (CAR (NTH val 1)))
                  (FIXP (CAR (NTH val 2]
             modif]
55:UB
((DefaultGetField NOT BROKEN))
56:ok
DefaultGetField
NIL
-*-*- So it did NOT allow that PutValue of 3 values, as we wanted.
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 11:23:15]
56←EU Daddy
edit
60*PPU
Isa     (AnyPerson)
MyIsa   (AnySelfAwareUnit)
MyCreator       RussGreiner
MyTimeOfCreation        " 3-Oct-81 23:19:02"
MyCreatedAs     (ICopiedFrom (Momma))
Gender  Male
AllIsas (AnyPerson Anything)
OrderedPrototypes       (TypicalPerson TypicalThing)
61*; Yep - no value for Possessions.  Let's nw give him something.
61*OK
Nothing changed.
Daddy
57←(PutValue 'Daddy 'Possessions '(3 32]


-*-*- There was a minor bug here, fixed...
68:REEVAL DefaultFieldToCompute T

(DefaultFieldToCompute broken)
69:?=
uN = Daddy
sL = Possessions
fLD = Format
oth = (SAFESLOT SAFEFIELD -CreateSubUnit)
70:eval
DefaultFieldToCompute evaluated
71:value
FListN
-*-*- Ok - bug fixed.
72:UB
(DefaultFieldToCompute)
73:ok
DefaultFieldToCompute
(3 32)
-*-*- Now Daddy has some values
73←EU
=Daddy
edit
74*-2 up p
... Possessions (3 32))
-*-*- What did I tell you?
76*ok
Nothing changed.
Daddy
-*-*- All of this would have worked sans sub-units.  Onward and downward:
74←EU AnyPoorPerson
edit
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 11:33:04]
77*PPU
MyIsa   (AnySelfAwareUnit)
MyCreator       RussGreiner
MyTimeOfCreation        "29-Sep-81 21:46:27"
MyCreatedAs     (ISubClass (AnyPerson))
Isa     (AnyClassOfObjects)
TotalSoFar      0
SuperClass      (AnyPerson)
UnitExamples    (George TypicalPoorPerson)
TypicalExample  TypicalPoorPerson
SuperClass*     (AnyPoorPerson AnyPerson Anything)
-*-*- So George is Poor
78*-3 EU
Editting the unit TypicalPoorPerson.
edit
80*p
(Isa (AnyPoorPerson) TypicalExampleOf AnyPoorPerson MyIsa (AnyTypicalExample 
AnySelfAwareUnit) MyCreator RussGreiner MyTimeOfCreation "29-Sep-81 22:07:37" 
MyCreatedAs (CopiedFrom &) Possessions (*Do* FSeeUnit 
PossessionsOfTypicalPoorPerson) AllIsas (AnyPoorPerson AnyPerson Anything) 
SuperTypEx* (TypicalThing TypicalPerson TypicalPoorPerson) OrderedPrototypes (
TypicalPoorPerson TypicalPerson TypicalThing))
80*f Poss≠
=Possessions
81*2 p
(*Do* FSeeUnit PossessionsOfTypicalPoorPerson)
-*-*- Aha - a subunit!
82*3 EU
Editting the unit PossessionsOfTypicalPoorPerson.
edit
83*p
(RangeType (FSet IntegerType) MyIsa (AnySelfAwareUnit) MyCreator RussGreiner 
MyTimeOfCreation "30-Sep-81 16:07:59" MyCreatedAs (IExamples &) Isa (AnySubUnit)
 MyLivesInLocation (TypicalPoorPerson Possessions) MyAllIsas (AnySelfAwareUnit 
AnyUnit AnyConcreteThing Anything) Datatype (IntegerType) Format FSet --)
83*; Note the RangeType here is different - permitting a set of Integers.
83*PPU
RangeType       (FSet IntegerType)
MyIsa   (AnySelfAwareUnit)
MyCreator       RussGreiner
MyTimeOfCreation        "30-Sep-81 16:07:59"
MyCreatedAs     (IExamples (AnyUnitForSlot AnySlot))
Isa     (AnySubUnit)
MyLivesInLocation       (TypicalPoorPerson Possessions)
MyAllIsas       (AnySelfAwareUnit AnyUnit AnyConcreteThing Anything)
Datatype        (IntegerType)
Format  FSet
AllIsas (AnySubUnit AnyIntensionalObject AnyAbstractThing Anything)
87*SP
Verifying slots
Using UA-PUTPROP, not full PutValue
PossessionsOfTypicalPoorPerson
88*ok
Nothing changed.
TypicalPoorPerson
89*ok
Nothing changed.
AnyPoorPerson
75←EU George
edit
90*p
(MyIsa (AnySelfAwareUnit) MyCreator RussGreiner MyTimeOfCreation 
"29-Sep-81 22:25:05" MyCreatedAs (IExamples &) Isa (*Do* FSeeUnit IsaOfGeorge) 
OrderedPrototypes (TypicalPoorPerson TypicalPerson TypicalThing) Possessions (
*Do* FSeeUnit PossessionsOfGeorge))
90*-1 -1 p
PossessionsOfGeorge
91*EU
Editting the unit PossessionsOfGeorge.
edit
92*p
(MyIsa (AnySelfAwareUnit) MyCreator RussGreiner MyTimeOfCreation 
"11-Oct-81 15:47:39" MyCreatedAs (IExamples &) Isa (AnySubUnit) 
OrderedPrototypes (TypicalSubUnit TypicalAbstractThing TypicalThing) 
MyLivesInLocation (George Possessions) *vaLue* RecomputeMe AllIsas (AnySubUnit 
AnyIntensionalObject AnyAbstractThing Anything) MyAllIsas (AnySelfAwareUnit 
AnyUnit AnyConcreteThing Anything) --)
92*w
... Datatype NoEntries)
93*ok
Nothing changed.
PossessionsOfGeorge
94*ok
Nothing changed.
George
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 11:35:31]
-*-*- So George had a Possessions subunit already. Let's Kill that.
-*-*- (This was created when I was monkeying around, testing out this
-*-*- field stuff.)

-*-*- This may not work -- I've never tested this KillSubUnit stuff.
76←KillUnit(PossessionsOfGeorge]

-*-*- Another minor bug: found, fixed and eliminated
-*-*- (Basic change: LivesInXXX => MyLivesInXXX.)
77:BT
ERROR
*PROG*LAM
Warning
GetAccessFn
GetValue
DeleteSubUnit
KillUnit
**TOP**

-*-*- Note it did find DeleteSubUnit function.
78:EU TypicalSubUnit
edit
95*f MyToKill≠
=MyToKillMe
96*2 p
DeleteSubUnit
-*-*- There it is.
97*OK
Nothing changed.
TypicalSubUnit
79:REEVAL DeleteSubUnit T

(DeleteSubUnit broken)
80:UB
(DeleteSubUnit)
81:!EDIT
Editting the function: DeleteSubUnit
loading from <GREINER.RLL>FIELD..7

-*-*- Edits ommitted -*-*-
27*ok
unsaved
82:
(DeleteSubUnit broken)
82:?=
uNIt = PossessionsOfGeorge
83:eval


   *****   In SetSCFormer:ToCompute.   ***** 
Break?  yes
In SetSCFormer:ToCompute.
NIL

(ERROR broken)
-*-*- A remnamt from some earlier "fix".  Let's see what it was, shall we?
85:EUB
Editting the unit, SetSCFormer.

collecting lists
15703, 15703 free cells, 29 pages left
edit
-*-*- The EUB is "tied in" with the Warning function, which gave the message
-*-*- above.  So is the Posn usermacro:
28*Posn
In slot, ToCompute
(Warning "In " (QUOTE SetSCFormer) ":" (QUOTE ToCompute) ".")
-*-*- IE this is the place which spit out that message a few lines earlier.
-*-*- Below is left in, in case you want to peruse what one SC former looks like.
-*-*- If not, skip to "-*-*- HERE -*-*-"
29*0 p
(PROG (& & &) (DECLARE &) (Warning "In " & ":" & ".") (RETURN &))
30*-1 2 p
(REC-CREATE FS (ToCompute &) (RangeType &) (DomainType dom) (Description &))
30*3 2 p
(BACKQUOTEQ* (LAMBDA & & &))
30*-1 p
(LAMBDA (slotlist oth args) (SETQ slotlist &) (REC-CREATE FS & & & &))
30*-1 3 2 p
(BACKQUOTEQ* (LAMBDA ,',args &))
30*-1 pp
[LAMBDA ,',args
  (OR
    [,@
      (COND
        ((AND (EQ (CAR dom-from)
                  (QUOTE FListN))
              (EQLENGTH dom-from 3))
          (LIST (QUOTE N-ARY)))
        ((ListFormat (CAR dom-from))
          NIL)
        (T (Warning "What type of function has a format like " dom-from "? ")
           NIL))
      ,
      (CAR specs)
      ,,@
      (MAPCAR
        slotlist
        (FUNCTION (LAMBDA (slt)
            (DECLARE (LOCALVARS slt)
                     (SPECVARS args))
            ,
            (COND
              [(MEMB (QUOTE UseElementsOfArgs)
                     fc)
                `(BACKQUOTEQ* (IsOk (,, [FormatCoersion
                                          (QUOTE , (CAR (CADR dom-from)))
                                          (GetValue (-> slt (FS)
                                                        ToCompute)
                                                    (QUOTE Format)
                                                    (QUOTE (SAFESLOT]
                                        ,,
                                        (GetGetVal slt (-> args (SlotArgs)
                                                           UnitName)
                                                   (-> args (SlotArgs)
                                                       Others]
              (T `(BACKQUOTEQ* (IsOk ,, (GetGetVal slt (-> args (SlotArgs)
                                                           UnitName)
                                                   (-> args (SlotArgs)
                                                       Others]
    NoEntries]
30*!nx p
(RangeType (LIST & &))
31*2 pp
[LIST [QUOTE , (COND ((MEMB (QUOTE PreservesOrder)
                            fc)
                       (QUOTE FOrderedSet))
                     (T (QUOTE FSet]
      (, (COND
           ((MEMB (QUOTE OR)
                  fc)
             (QUOTE UnionDT))
           ((MEMB (QUOTE AND)
                  fc)
             (QUOTE IntersectDT))
           (T (Warning "In " (QUOTE SetSCFormer)
                       ":"
                       (QUOTE ToCompute)
                       "." "  - are you taking the OR junction, or the AND?")))
         (MAPCAR slotlist (FUNCTION (LAMBDA (slt)
                     (DECLARE (LOCALVARS slt))
                     (PROG ((rt (-> slt (FS)
                                    RangeType)))
                           (DECLARE (LOCALVARS rt))
                           (RETURN (SELECTQ (CAR rt)
                                            (FListN (CONS (QUOTE L-OR)
                                                          (CDR rt)))
                                            (CADR rt]
32*nx

NX  ?
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 11:44:09]
33*!nx p
(DomainType (BACKQUOTEQ* &))
34*-1 pp
`(FListN ,, (IntersectDT (MAPCAR slotlist (FUNCTION SingleArgOf)))
         UnrestrictedType)
35*; Ah yes, this was the fix.  Nothing to worry about.
35*; (This must be doing wonders at instilling confidence.  Oh well...)
...
35*TOS
-*-*- TOS put me at the top of the slot.
36*p
(LAMBDA (specs other args) (DECLARE &) (PROG & & & &))
36*f Warn≠
=Warning
37*p
(Warning "In " (QUOTE SetSCFormer) ":" (QUOTE ToCompute) ".")
37*:
-*-*- Just to remove it from future consideration.
-*-*- If not, skip to "-*-*- HERE -*-*-"
38*SP
Verifying slots
Using UA-PUTPROP, not full PutValue
86:RETURN
ERROR = NIL

-*-*- Here are 22 list garbage collections.  Throughout the Bumping facility
-*-*- has been working like a charm.
-*-*- But I was curious just what was happening, so I ↑Hed.

interrupted before RPLACD

(RPLACD broken)
87:NXBRK
(UA-GETPROP UA-PUTPROP UA-REMPROP)
-*-*- The NXBRK macro simply breaks those function above.
88:ok
RPLACD

(UA-GETPROP broken)
89:?=
$$UNIT = FnForUpdating
$$PROP = ToGetValue
90:BT
UA-GETPROP
GetAccessFn
GetValue
UpdateASUIB
*PROG*LAM
InvalidateEach
UpdateASUIB
COND
(LAMBDA (thisslot changedslot args hld) (* OR args &) (COND & & &))
APPLY*
COND
*PROG*LAM
PROG
(LAMBDA (suib) (DECLARE &) (PROG & & &))
MAPCAR
OR
*PROG*LAM
PROG
(LAMBDA (slt oth) (DECLARE & &) (PROG & & & &))
APPLY*
(LAMBDA (unt sl oth) (APPLY* & unt oth))
GetValue
PROG
(LAMBDA (slt oth) (DECLARE &) (PROG & & & & & & &))
DefaultActualGetValue
GetValue
DefaultAfterPutValue
DefaultInvalidateUnitFn
InvalidateValue
*PROG*LAM
*PROG*LAM
UpdateDepend
AND
(LAMBDA (uThisUnit uThisSlot new modif why) (AND & &))
DefaultAfterPutValue
*PROG*LAM
DefaultPutValue
PutValue
DefaultInvalidateSlot
InvalidateValue
*PROG*LAM
*PROG*LAM
UpdateDepend
AND
(LAMBDA (uThisUnit uThisSlot new modif why) (AND & &))
DefaultAfterPutValue
*PROG*LAM
DefaultPutValue
PutValue
CacheIfNonTrivial
CacheValue
DefaultActualGetValue
GetValue
EVAL
*PROG*LAM
*PROG*LAM
UpdateDepend
AND
(LAMBDA (uThisUnit uThisSlot new modif why) (AND & &))
DefaultAfterPutValue
*PROG*LAM
DefaultDeleteValue
DeleteValue
*PROG*LAM
*PROG*LAM
DeleteInverseLinksA0196
MapSlotsA0151
MAP2C
MapSlots
DeleteInverseLinks
DefaultDeleteThing
*PROG*LAM
PROG
DeleteSubUnit
KillUnit
KillUnit
**TOP**

-*-*- So a lot of things are going on.
-*-*- This gives me a chance to show off the BTFN macro
91:BTFN GetValue

   *ARG3 (SAFESLOT)
   *ARG2 FnForUpdating
   *ARG1 OneOf
GetValue

   *ARG3 (SAFESLOT)
   *ARG2 EffectedSlotsGen
   *ARG1 Prototypes
GetValue

   *ARG3 (SAFESLOT)
   *ARG2 KBUpdates
   *ARG1 Prototypes
GetValue

   *ARG3 (SAFESLOT)
   *ARG2 SuperClass*
   *ARG1 AnySubUnit
GetValue
**TOP**

92:BTFN HLDefnExpander
**TOP**

93:BTFN Invalid≠ Update≠
=UpdateASUIB

   gen-p Gen
   args (uThisUnit uThisSlot new modif why)

   changslt Prototypes
   hld (OneOf SuperClass* SuperTypEx* SuperSlot* GenlAct*)

   affectdst AllGenls
UpdateASUIB
=InvalidateEach

   *ARG5 Gen
   *ARG4 (uThisUnit uThisSlot new modif why)

   *ARG3 Prototypes
   *ARG2 (Unioning Prototypes (OneOf SuperClass* SuperTypEx* SuperSlot* 
                                     GenlAct*))

   *ARG1 AllGenls
InvalidateEach
=UpdateASUIB

   gen-p Gen
   args (uThisUnit uThisSlot new modif why)

   changslt Prototypes
   hld (Unioning Prototypes (OneOf SuperClass* SuperTypEx* SuperSlot* GenlAct*))

   affectdst AllGenls
UpdateASUIB
=InvalidateValue

   *ARG4 (-INVERSES (From MySensibleSlots MySS-Std MyPrototypes AllIsas 
                          SuperClass*)
                    -VERIFY)

   *ARG3 AllIsas
   *ARG2 Prototypes
   *ARG1 IsaOfGeorge
InvalidateValue
=UpdateDepend

   why (-INVERSES (From MySensibleSlots MySS-Std MyPrototypes AllIsas 
                        SuperClass*)
                  -VERIFY)

   *ARG5 (OldVal AnySubUnit AnyIntensionalObject AnyAbstractThing Anything)

   *ARG4 RecomputeMe
   uThisSlot AllIsas
   *ARG2 IsaOfGeorge
   *ARG1 ((MyPrototypes uThisUnit Invalidate1)
          (Prototypes uThisUnit Invalidate1))
UpdateDepend
=InvalidateValue

   *ARG4 ((From MySensibleSlots MySS-Std MyPrototypes AllIsas SuperClass*)
          -VERIFY)

   *ARG3 SuperClass*
   *ARG2 AllIsas
   *ARG1 IsaOfGeorge
InvalidateValue
=UpdateDepend

   why ((From MySensibleSlots MySS-Std MyPrototypes AllIsas SuperClass*)
        -VERIFY)

   *ARG5 (OldVal)
   *ARG4 (AnySubUnit AnyIntensionalObject AnyAbstractThing Anything)

   uThisSlot SuperClass*
   *ARG2 AnySubUnit
   *ARG1 ((MyAllIsas NIL Invalidate0)
          (AllIsas [LISTP (GetValue uThisUnit (QUOTE UnitExamples)
                                    (QUOTE (SAFESLOT]
                   InvalidateAll)
          (GenlsModels uThisUnit Invalidate1)
          (AllGenls uThisUnit Invalidate1))
UpdateDepend
=UpdateDepend

   why ((From UnitExamples)
        -VERIFY -INVERSES)

   *ARG5 (Delete1 . PossessionsOfGeorge)
   *ARG4 (IsaOfGeorge PossessionsOfTypicalPoorPerson TypicalSubUnit)

   uThisSlot UnitExamples
   *ARG2 AnySubUnit
   *ARG1 ((AllExamples [LISTP (GetValue uThisUnit (QUOTE SuperClass*)
                                        (QUOTE (SAFESLOT]
                       InvalidateAll))
UpdateDepend
**TOP**

-*-*- Well, everything's kosher.  The reason it's taking so long is because
-*-*- I was fooling around with that IsaOfGeorge subunit.  So there's
-*-*- a lot of new things it has to do, to handle this subunit.
-*-*- (A lot of the work above was done for RLL to understand the classes
-*-*- to which George belongs...)
94:UB

collecting lists
17041, 17041 free cells, 29 pages left
(UA-GETPROP)
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [12-Oct-81 11:53:33]
-*-*- By the way, if you suspect that units are NOT be bumped fast enough,
-*-*- the macro
95:BUMP
There are now 16 units `in core'.
"!DONE!"
-*-*- bumps units until there are fewer than 60 left.
-*-*- anyway
96:OK
UA-GETPROP

(UA-PUTPROP broken)
97:?=
$$UNIT = PutInOrder-C
$$PROP = FnForUpdating
$$VALUE = OrderingUpdating
98:UB
(UA-PUTPROP)
99:ok
UA-PUTPROP

(UA-REMPROP broken)
100:?=
$$UNIT = IsaOfGeorge
$$PROP = OrderedPrototypes
1:CHECK
Value of (UA-GETPROP 'IsaOfGeorge 'OrderedPrototypes) is
(TypicalSubUnit TypicalAbstractThing TypicalThing)
-*-*- This macro is pretty general, and fairly smart at finding the unit and slot
-*-*- to present.
2:ok
UA-REMPROP

(UA-REMPROP broken)
3:?=
$$UNIT = PossessionsOfTypicalPoorPerson
$$PROP = AllIsas
4:CHECK
Value of (UA-GETPROP 'PossessionsOfTypicalPoorPerson 'AllIsas) is
(AnySubUnit AnyIntensionalObject AnyAbstractThing Anything)
5:UB
(UA-REMPROP)
7:ok
UA-REMPROP

collecting lists
21216, 21216 free cells, 29 pages left

collecting atom name characters
1271, 1271 free cells, 29 pages left
Poof!
-*-*- it's gone - let's check, just to make sure:
8←EU
=SetSCFormer
edit
-*-*- Oops - not EU<cr> edits the previous unit. Anyway,
39*ok
Nothing changed.
SetSCFormer
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 11:57:36]
9←EU George
edit
40*f Isa
41*p
... Isa (*Do* FSeeUnit IsaOfGeorge) OrderedPrototypes (TypicalPoorPerson 
TypicalPerson TypicalThing) Possessions NoEntry)
-*-*- Currently no possessions, not a FSeeUnit.
41*ok
Nothing changed.
George
-*-*- to show the GetValue works, even "through" a subunit
10←GetValue(George Isa]
(AnyPoorPerson)
-*-*- Let's see how much faster this killing will be, once things are cached away:
11←KillUnit(IsaOfGeorge]
Poof!
-*-*- No GCs, it took only a few seconds.
12←EU
=George
edit
42*PPU
MyIsa   (AnySelfAwareUnit)
MyCreator       RussGreiner
MyTimeOfCreation        "29-Sep-81 22:25:05"
MyCreatedAs     (IExamples (AnyPoorPerson))
Isa     (AnyPoorPerson)
OrderedPrototypes       (TypicalPoorPerson TypicalPerson TypicalThing)
Possessions     NoEntry
-*-*- and he's still a poor person.
43*ok
Nothing changed.
George
13←; now to use a subunit:
13←PutValue(George Possessions (1 2 3 4 5]

collecting atom name characters
931, 931 free cells, 29 pages left
(1 2 3 4 5)
-*-*- Recall that would NOT have worked for Daddy.  The reason:
-*-*- the values were verified by
14←EU PossessionsOfTypicalPoorPerson
edit
44*p
(RangeType (FSet IntegerType) MyIsa (AnySelfAwareUnit) MyCreator RussGreiner 
MyTimeOfCreation "30-Sep-81 16:07:59" MyCreatedAs (IExamples &) Isa (AnySubUnit)
 MyLivesInLocation (TypicalPoorPerson Possessions) MyAllIsas (AnySelfAwareUnit 
AnyUnit AnyConcreteThing Anything) Datatype (IntegerType) Format FSet --)
44*w
... VerifyAll (LAMBDA & &))
45*-1 pp
[LAMBDA (un sl val sub xtr modif)
  (AND [COND
         ((ATOM val)
           (EQ val NoEntries))
         (T (PROG ((MACROX val))
                  (DECLARE (LOCALVARS MACROX))
              MAPCLP
                  (COND
                    ((NULL (LISTP MACROX))
                      (RETURN T))
                    ((NULL (FIXP (CAR MACROX)))
                      (RETURN)))
                  (SETQ MACROX (CDR MACROX))
                  (GO MAPCLP]
       modif]
-*-*- ↑ this function.
46*SP
Nothing changed.
PossessionsOfTypicalPoorPerson
-*-*- Now let's make poor people really poor.
 ***  Am re-opening Dribble file: <GREINER.RLL>TRACEA.OCT12.1 [
12-Oct-81 12:02:17]
15←(PutField 'TypicalPoorPerson 'Possessions 'RangeType '(FListN IntegerType]

collecting lists
17420, 17420 free cells, 29 pages left

collecting lists
17797, 17797 free cells, 29 pages left

collecting atom name characters
1277, 1277 free cells, 29 pages left

collecting lists
18421, 18421 free cells, 29 pages left
The value of PossessionsOfTypicalPoorPerson:Format changed from FSet to FListN.
Shall I update all previously cached values, accordingly? no
(FListN IntegerType)
-*-*- Actually, I probably should have let it, as only George would have been
-*-*- effected.
16←EU George
edit
47*f Pos≠
=Possessions
48*p
... Possessions (1 2 3 4 5) AllIsas (AnyPoorPerson AnyPerson Anything))
48*:
49*:
50*SP
Verifying slots
-*-*- I deleted the value by hand, for safety.
Using UA-PUTPROP, not full PutValue
George
-*-*- Now let's try that same
17←PutValue(George Possessions (6 4 3]
NIL
-*-*- Note it didn't work, as desired.
18←fix 17
edit
51*-1 bk p
(George Possessions (6 4 3))
53*-1 p
(6 4 3)
54*(2)
55*(2)
56*ok
(6)
-*-*- Now what do you want to see?
-*-*- The addvalues, deletevalues, ... all work correspondingly.
19←SOS RUSS
Bye now.
(Just created the sysout <GREINER.RLL>RUSS.EXE.1)
It is now 12-Oct-81 12:07:11.
Closing DribbleFile <GREINER.RLL>TRACEA.OCT12.1
∂19-Oct-81  1345	Steve Klein <SKLEIN at USC-ISIB> 	Reincarnation   
To: RDG at SU-AI

Hi.  Sorry for this extreeeeemly long delay.  As is disgustingly typical, I
was buried under some other details around here.  I am, however, getting back
into the continuous RLL mode so things should pick up quickly.  Bill is now
very anxious for me to make something happen.  I've only done a first reading
of your opus dribble (when I first got it) so I won't comment on anything yet.
Reactions either later today, or tomorrow (looks neat, though)...
Steve.
-------

∂20-Oct-81  1813	Steve Klein <SKLEIN at USC-ISIB> 	murk (murf?)    
To: RDG at SU-AI

Owdy:

Well, I semi-digested your magnum opus...the thing that looks the most
"interesting" at the moment is the fact that slots and fields seem to
be entirely intermingled (TypicalSlot is a good example).  Although
I followed your prior argument about similarity of the two, it 
never-the-less seems strange.  
Some possibilities:  there is some clear distinguishing principle 
                        (currently unknown)
                     they are in reality identical 
                     both represent instances of some more fundamental
                        mechanism (yeech)

The second possibility would be interesting, but likely unreasonable.
Clearly, this doesn't matter much at the moment and probably only use
will provide answers, so what the hell...

I don't have any direct answers to any of the problems you raised, 
hopefully that will change later (or you'll solve them, hee hee).

I haven't implemented the modification-recording mechanism yet, partially
due to the state (until recently) of the modification and why parms.
Consequently, the only changes we have are the basic functional changes
contained in <MANCOM.RLL>ADDITIONS..    I don't know how you want to
handle incorporation/ftping/whatever, or whether you want to accept all
of the changes I've made...  Let me know tomorrow and we can hack out
the details on everything.  Actually, when you are in and free, I can
just give you a call, long-distance even being approved of hereabouts.

Steve.
-------

∂TO SKLEIN 11:48 21-Oct
Current, immediate status:
	LISP died a funny death last Sunday -- only ↑C worked, to get me
out of it.  Apparently some random thing happened to wedge the job, between
LISP and Rand-AI itself.  The net effect was that I lost about 3 1/2 hours
of work.  Fortunately I do have the dribble file from that -- unfortunately
that file requires 143 line printer pages to print out.  I'm now hoping to
return to where I was just-before-the-end of that session...  Grumble.

Anyway, yes, we should chat - perhaps later today.  I plan to be home
all day -- until about 7:45PM.  When shall I expect a call?  Maybe about 2:30?

----
Below are some comments/suggestions/warning:

1. In the "I can't believe I did it that way" category:
Recall our friend, FunctionSpec:  the (never cached) value of F:FunctionSpec
was a list of four arguments, (ToCompute RangeType DomainType ?).  The idea
was for those Domain and Range descriptions to help specify the function, stored
in the first position.  However they did not correspond: the DomainType for a 
slot was for two arguments, as these were all the arguments a slot, when viewed
as a function, can take (ie (Isa 'Steve '(SAFESLOT)), where that second 
argument is optional, permitting (ToCompute 'SuperClass*)).  
Before the recent change, that ToCompute function took 3 arguments!
It's now been fixed, basically
by twiddling the pertanent(sp) Slot Combiners, (actually by simply massaging
the yet even fewer SC Formers,) and putting a check in DefaultActualGetValue
which shouts if the S:ToCompute value is a function of more that two arguments.  
If and when it hollers, say Y to the "Break? " question, then use the EUB
BREAKMACRO (by typing EUB<cr> to the : prompt), then (FSlt ToCompute) to go
to the ToCompute slot; NX positions you on the offending value.

2.  MySensibleSlots has a new definition: Turns out those slots which make
sense for a subunit are both those which are well defined for subunits,
and those which
make sense for the unit which describes the slot which this subunit fills.
(EG there are two categories of legitimate slots for the PossessionsofGeorge
unit: slots which are defined for subunits in general, such as *vaLue* or 
MyLivesInUnit, and those which are defined for the slot Possessions,
such as HighLevelDefn, or RangeType.)
MySensibleSlots' definition knows about this now.
Anyway, I think this is done correctly; and that the few places which use
this value (c.f. IsaAPV) do the correct thing.  Still this is largely
untested.

3. The way of determining the RangeType of a function from its HighLevelDefn,
is much smarter now.  For things like Composition or Application, it will
use the range of one argument as the domain to the next in the cascade --
and the RangeType can now take this.  See the GetRangeApply function, and
(units representing) functions like MAPCAR for an illustration of this.

I should comment I'm not real happy about what those xxxRangeFn functions
are inside.  The current, slipshod implementation has them checking for
specific Formats, and handling each seperately.  Certainly they should,
at least, look at the format specs, and use these for their reasoning.
Maybe I'll worry about this later... maybe not.

4. I made a slight change to the case when there is no need to actually
perform a requested update -- 
eg when the user types PutValue(U S V) when the value of U:S is already V).
The ActualXXXValue routines (for XXX in Put, Add, Delete and Subst)
used to return the atom NoNeedToUpdate.
For subtle reasons, it became clear we had to return the value as well --
so now these routines return a list whose CAR is 
NoNeedToUpdate, and whose CDR is that vaue.


--- Undone ---

1) Have you made any headway in figuring how to record updates made
to the core KBs?  I haven't done anything on this since that initial
set of thoughts, way-back when.
A suggestion:  There is a way we can determine whether a PutValue is
being done at "top level" versus embedded in some hairy-mess:
this involves the /FNS.  These were designed to facilitate the undoing
commands, but I think we could exploit them for this purpose.

(Of course, on a seperate line, we could try to implement some undoing
capability, by ADVISEing UA-PUTPROP and UA-REMPROP in such a way that
they record how to undo them; and store this on some "slot" of the various
historical location.  Then we could undo a command by executing that list
of thing-to-do, to revert back to the state just prior to that instruction.
Of course, we would then have to worry about undo-ing that undo; and about
side effects of undoing user-command # 5 after performing commands 6 and 7.
I'll let you worry about it...)

2) The REEVAL breakmacro needs to be fixed.  Typing REEVAL fn,
where fn is NOT a function on the stack, sometimes hangs the job -
even ↑H and ↑Es are ineffective.  This uses a generator to walk along
the stack, trying to do spelling corretion.  What do you know about generators?

3) There are still a mess of Warnings strewn about 
-- especially wrt to ApplyToEach things.
I delayed working on that until after (I felt) fields were done satisfactorially.

---
Russ

∂24 Oct 1981 1834-PDT	<CSD.GREINER at SU-SCORE>	Abundance of trivia
To: sklein at USC-ISIB
cc: GREINER at RAND-AI

Well, I snarfed over (does "over" go with "snarf"?  probably not... anyway,)
your ADDITIONS file, and have incorporated much of it into various rll files -
in my current sysout.  The functions I did NOT absorb are:
	KB-Summary  - - do you really plan to type out hundreds of unit on 
		the terminal? 
	FoundIn	- - I think this is the same as a UNIT function, OccursIn.
	NewSpec - - There will eventually be an ISpec inheritance, which will
		use this function.  The NewSubClass function is the one which
		employs ISubClass.
	Up-Put1	- - I intensionally left a long string of names here.
	UsedInSlot - - Awfully expensive; and not used that often.  Actually,
		I do have something like this in DefaultRenameThing, I think.
	WHYFILE?  - - Various KB maintance routines should obviate the need for
		this -- as they ask where to store a function as that function
		is defined.  Use PUTDF instead of PUTD for this, by the way.
		[Nuts and bolts: this is done by a WHENCHANGED parameter
		 associated with FNS.]
-----

By the way, I added your fix into UP-BUMP; and things seem to work now.
I put RLL thru its paces, and I've not lost any pages in quite a while.
Thanks much.

Now my code, on the other hand...
I keep finding, and fixing, little bug-ettes.  I also want to test out one
more thing with FIELDs.  Then I'll close everything up, and pronounce it
all ready to ship.

-----
By the way, there is a on-trivial (but still semi-solvable) problem with
that \FNS proposal:  Much as I'd like to believe to the contrary, my functions
don't always work perfectedly.  When should happen when, say, a PutValue
(or some embedded/called subfunction) breaks during its execution; and the 
user then does some other KB modification?  How should that be annotated?

Perhaps on enterring a /PutValue that function could write something of the
form 
	(PutValue 'u 's 'v 'y
Note the absense of a closing ")".  That gets appended on the COMPLETION
of the associated PutValue.  Now any /UA-PUTPROPs, etc., will be present 
as extraneous arguments within that same form.  The casual user, 
when using this file to "update" his KBs, can simply ignore the side effects.
By reading in this file and executing each step, the UA-PUTPROPs (or whatever)
will be done before the "calling" PutValue -- which will usualy do the right
thing.  A more concerned user could do something else whenever a function has
too many arguments.  For example, the user may have "written" some other
information in that file, telling his follower what to do.  Perhaps the
\fn could do something like that -- eg storing BT in the file, or a pointer
to the location in the dribble file corresponding to this problem.
(This could be achieved by using a global variable, set by each of these
\fns to indicate their presence on the stack.)

Another point: we have to record GetValue's as well; as they might cache a
value.  (Either that or record each CacheValue!)
-----

There are many other improvements which should be done eventually to rll.
But, having adjusted my blinders, I'l delay them until you've a copy of
the working system to have and to hold.

Hooo!  (pronounced "hoe", over a many second interval, giving it a 
rounded sound...)

Russ
-------

∂25 Oct 1981 1345-PST	<GREINER>	One more thing:
To: sklein at USC-ISIB
cc: greiNER

I also did NOT save FindFn.  If these are functions you use with great frequency
you can store them on some central KB's associated LISP file; so they will
be loaded in each time you enter a RLL session.  (Either that or convince me
they serve some major function needed in general.)
	That's all for now.
Russ
-------

∂26 Oct 1981 1547-PST	<GREINER>	Delays, delays, delays...
To: sklein at USC-ISIB
cc: greiner

Somewhere between spoon and lip ... the changes I made to FIELD.KB have 
disappeared!   I mentioned that LISP was acting funny these last few days;
apparently this is an old potentially-buggy version, Keith now tells me.
Anyway, I now know how to use the more recent version, and will do so.

For now, I will RETRIEVE my last version from back up tape, and see how much
that includes.  Grrr...

Anyway, the answer to your "when?" question remains, I afraid, "soon".

Russ
-------


∂ 1 Nov 1981 1241-PST	<GREINER>	Come and get it!
To: sklein at USC-ISIB
cc: greiNER

Finally, at long last, Glory-Be!  The various files on <GREINER.RLL> and
<GREINER.CORLL> are now at your disposal.  Hurry and gobble them up before
I decide to make a simple, innocuous change...

Still no guarantees that everything'll work when you try it, but I did a small
amount of experimentation and everything behaved as desired.

Issues:  UA-GETPROP didn't work a few times.  Examining it showed a glaring
error Dave made months ago which, until bumping worked correctly, just
never happened to happen.  (Basically there's an interval in UA-GET between
when the contents of the unit have been read in, and some field of the
unit's overhead structure is set which is NOT in a critical region.  Now that
bumping happens more often, a unit just being read in might be swapped out.
This causes the unit's value to be NIL, causing a "Trying to RPLACA NIL" error.
The fact that this never happened before is impressive.)  Anyway, I think
I fixed this problem.  (During that fix I found that Dave's UP-NOBUMP also
has an obvious mistake: it used a PROG2 rather than a PROG1.  That too
has been fixed.)  The moral here is that CORLL may be much hole-ier than I
thought; and that we should be careful when repairing it -- just because
it's worked for quite a while doesn't mean all of its bugs are out.
(Especially when the error lies in things like MACROs, which haven't been
really used for eons.)

Of course the same is true for RLL as well, in spades.  But you know that.

Next: until those /PutValue, ... functions are done I guess I'll send
you my dribble files?  The other possibility is for you to keep your
deltas recorded somewhere, allowing you to simply snarf the next RLL release,
then run you increments to it.  Or is there some other possiblity?

My agenda: the time has come to get MACROs to work... The proportion of
my RLL time spent terminal watching rather than coding is non-trivial.
Besides it's time to make good my claim that this is about to work...
I did want you to have a working system first, though.

-----
Anyway, how're things in general there?  Not much here, besides a recent 
rash of mouth sores.  (This happens several times a year, for mysterious
and unpredictable (to me at least) reasons.)  Thesis is sorta advancing;
Rand's stuff has been relegated to the bottom of the stack -- even
below recreational reading:  I'm finally finishing up a book I started
over a year ago: "Chimera" by John Barth.  'Tis quite good.
-----
Onto macros! Charge...
	Russ
-------
-------

∂ 3 Nov 1981 1822-PST	<SKLEIN at USC-ISIB>	Re: Come and get it!
To: GREINER at RAND-AI

Always delays...our consultant from Australia showed up for a week or two,
so things have been more hectic than usual.  I'll snarf over the fruits
of your labor after I finish this msg.  Seems easiest to just grab new
versions until the recording stuff is done.  My plans are to try stuffing
things in over the next two weeks or so.  Should also get some version of
the /fns done over the same span.  Hopefully there won't be any hitches
(ha) since Bill is a bit reluctant for me (or anyone) to get "sidetracked".
I'll hop on the phone forth haste if I see anything strange going on.

I/we (parents) put in a bid on a house in Woodland Hills a few days ago...
shall see whether anything useful comes of it.  I think I read my first trash
novel in about 8 months yesterday...was probably because I didn't want to do
any work, rather than extra available time.  I've been oscillating in
semi-full/semi-parttime student status at ISI for a while, will probably go on
real-status (= staff) soon.  I think I'm "setting aside" UCLA for the near
future.  Now comes the fun part of haggling over salary, etc.--beats me what I
should ask for / expect...

Bleep-Deep.
-------
-------

∂06-Nov-81  1710	Steve Klein <SKLEIN at USC-ISIB> 	hmm...

Russ-- 
Greets.  I seem to be having a problem in bringing up a new RLL.  Briefly, I
can (seemingly) make a CORLL sysout fine, but in executing START, things croak
before getting very far.  The warning in Up-Put1 gets activated.  On the first
time through the advice to UP-PUT is being removed (I checked), but SOMEHOW
that same advice is being used again (and Up-Put1 is called a second time).
If I load in an OLD copy of UP-PUT, the problem doesn't occur.  I tried to
load a new copy (from CORLL..320) but get END OF FILE errors...do you get any
of these / know of something that might have gone wrong?
Steve.
-------

∂ 7 Nov 1981 2053-PST	<GREINER>	CORLL
To: sklein at USC-ISIB
cc: greiNER

Yea, turns out my CORLL here was broken also... I just never got to a
bump, and so didn't notice.  It appears that LISP buggered it in some
really funny way, as all of the parentheses match as best I can tell.

Anyway, using EMACS, and READ, RATOM, and re-LOADing the file, I did
manage to construct (what I think is) a working version of CORLL.. and
CORLL.COM.  At least the BUMP problem doesn't appear with it, and all
of the functions appear to be present.  (Yes, my fingers are indeed crossed.)
(By the way, I thought the ↑Js in the file were the culprits, but that's
apparently not the case... it all works now, even with them.)

As Rand-Ai will be down all day tomorrow, I took the liberty of depositing
those corrected versions over onto ISIB.  Enjoy.

Two side (EMACS) questions:
EMACS does have a command for finding the balancing parethesis,
counting "(" and ")"s.  Is there any way to teach it about "[" and "]"s?
Better, how hard would it be to write a little macro which did the conversion?

Next: how does one go about scanning for ↑Js?  Typing ↑S↑Q↑J is not sufficient:
this seems to locate carriage returns (or something like that.)
Typing another ↑J at this point DOES seem to work.  Why?  Am I really telling
EMACS to scan for any <CR>↑J ?  Note ↑S↑J only finds the <CR>s, I think.

Going on, how do I replace ↑J with ""?  <esc>%↑Q↑Q↑Q↑J<esc><esc>  found only
one, then stopped.  
---- These aren't big things, just idle curiousity, of course. ----

Good luck on house-buying.  Hi-oh-Thesis, away...
	Russ
-------

∂ 8 Nov 1981 1644-PST	<GREINER>	Minor bug
To: sklein at USC-ISIB
cc: greiNER

It appears EVALV works in funny ways -- or at least in some manner which
I don't understand.  Anyway, the ChangedFn function will, on occasion,
not work because (EVALV KBfns) returns NIL rather than the list it should.
Anyway, you've been warned.  (The effect is variables like RLLFNS get
reset to be a singleton list, confusing the LOADFNS routines (called by
EDITF) no end.)  Next iteration will have a safer, if slower, EVAL.

Back to macro-izing.
	Russ
-------

∂ 9 Nov 1981 1652-PST	<SKLEIN at USC-ISIB>	problem resolved
To: Greiner at RAND-AI

Hi.  Problem with missing InOther was a bit more drastic than either of
us assumed, but easier to fix.  Turns out to be due to file versions.
I snarfed over your new files with the retain option, however, the newest
version of RLL.. had a lower version number than the version I had from
the previous time, so that older version was the one that got loaded in.
We have found it beneficial (not to seem prescriptive) to keep com file
versions the same as that of their symbolic source...thus this generally
doesn't happen.  If you think that might be useful, I won't complain, otherwise
I'll just be more careful in bringing stuff over...
-------

∂10 Nov 1981 1801-PST	<CSD.GREINER at SU-SCORE>	Macros, etc
To: sklein at USC-ISIB
cc: greiner at RAND-AI

Steve -

Well, here's the description I promised.  Consider the function
(DEFINEQ (FOO  (x) 
	...  (GetValue x 'AllIsas '(SAFESLOT)) ... ))

As FOO is compiled, the GetValue macro expands.  The macro is pretty simple:
Unless the slot (ie its second argument) is quoted, nothing happens.
(IE the macro returns IGNOREMACRO.)
Otherwise the macro looks up the value of that slot's ToGetValue --
in this case DefaultActualGetValue = AllIsas:ToGetValue.
This value is then substituted for the original GetValue call -- hence the
compiled FOO looks like

(DEFINEQ (FOO  (x) 
	...  (DefaultActualGetValue x 'AllIsas '(SAFESLOT)) ... ))

The work is not done yet -- we have to record that the value of
AllIsas:ToGetValue has been used.  This is stored on the GetValue unit,
on its MacroUsedIn slot.  (See the MarkMacroUse function.  Advise to
COMPILE1 is used to pass the (name of the) function being compiled.)

Suppose we new reset AllIsas:ToGetValue.  The existing mechanism, used for
doing the standard KB modifications when any slot's value is changed,
is to execute the KBUpdates slot of affected slot, here ToGetValue.
I'll describe that function's creation in a moment.  The salient feature,
at this point, is that it knows to go to the GetValue:MacrosUsedIn value,
which stores those functions which used AllIsas:ToGetValue.  Each of those
functions is "invalidated".  This is pretty straightforward: if the function
is currently compiled code, (ie if CCODEP(fn) is nonNIL,) its source code
replaces that functional definition (using LOADFNS).  If it is currently
"loaded" but not compiled, nothing is done.   Otherwise the name of this
function is stored on a global variable, ToBeUnCompiledFns.

(Advise to LOAD will use that variable: LOAD will now recompile any
function which is on that list before "admitting" it into the working system.)

----
Before embellishing this macro description, I wanted to elaborate this
KBUpdates slot.  In particular, nothing new had to be added to its definition:
The only change was on TypicalLISPFn:FnForInvalidating and 
TypicalLISPFn:ToInvalidateValue, which GetValue will "inherit".

Nuts and bolts: The KBUpdates function will, of course, be given a
bunch of arguments, including the name of the slot which was alterred
(here ToGetValue), on which unit (here AllIsas), the function whose
macro should now be invalidated: GetValue, and the function in which
this macro was expanded - FOO.
Anyway, as KBUpdates:ToCompute shows, x:KBUpdates is generated using each
of the functions which use the cached value of ToGetValue -- listing the
value of each of their (respective) FnForInvalidating (?) slots.
Anyway, GetValue is on ToGetValue:CVUsedBy, and so the processing which
constructs this ToGetValue:KBUpdates will know to generate which,
in this case, invalidates FOO.
<pause to catch breath>

----
There are, of course, similar macros for PutValue, AddValue, DeleteValue 
and SubstValue.
Eventually I'll macro-ize the various get-value functions 
(respectively putting-value functions) -- so
DefaultActualGetValue, PrimGetValue, etc., will be able to using things
like the Format of the slot used, or it ToCacheValue value.
As with ToGetValue, if ever s:Format is changed, the compiled version, 
which relied on that value, will
be thrown out, and the still accurate source code will take over.

The value of x:MacrosUsedIn, by the way, is of the form
	( ... (access-slot (slot1 fn1 fn2 ...) (slot2 fnN ...)) ...)
eg the value of GetValue:MacrosUsedIn, after FOO was compiled, is
	( (ToGetValue (AllIsas FOO)) ).

----
Remaining problems:

What if FOO is editted, and the call to (GetValue x 'AllIsas ...) is removed?
How do I know to go to the GetValue unit, and adjust its MacrosUsedIn slot?
The obvious possibility is to throw out all record of FOO's embedded 
macros each time FOO is compiled -- assuming they are re-inserted as 
needed during the GetValue-macro-expansion.
The problem with this is how to store these inverse links.  Certainly if
each such function is a macro we could establish a contain-macro slot,
containing comparable information to the MacrosUsedIn value.
However few of the functions have yet been unitized.  Perhaps this provides
the incentive to do that?

Anyway, the current implementation makes the fallacious claim that
"once a macro is defined in a function, it will always be present".
Eventually I'll fix this up.

Another problem is how to maintain that ToBeUnCompiledFns variable across
systems -- what if you get the list from my current system (included in
my UTIL file), but not the corresponding units -- in LISPFNS.KB?
One possible solution involves storing the list of to-be-invalidated
functions (eg FOO, if FOO wasn't around when AllIsas:ToGetValue was changed,)
on the unit representing the macro - here GetValue.  This would slow down
loading -- as a pre-processing step would have to first walk thru each
of these macro-units assembling the ToBeUnCompiledFns list.
Argh...


The final worry I have is actually a problem which (I realize now) might
erupt in other places as well.  It deals with "race conditions".
After we change, say AllIsas:ToGetValue, it'll take a while before
the various functions are actually updated.  Until then, they are
still using that old value.  What if one of these functions was in fact
used in computing KBUpdates, or some other application.  
This probably won't be much of a problem, as there are only a handful
of such functions.  

A related worry returns to Garden-of-Eden considerations:  We can
now define the GetValue function as
(LAMBDA (un sl ot) (APPLY* (GetValue sl 'ToGetValue '(SAFESLOT))
			   un sl ot)),
sorta.  When compiled, that GetValue will "expand" into GetAccessFn
(as that's the value of ToGetValue:ToGetValue).  So the compiled
version of this function works perfectly -- it's the source code
which will infinite-loop.  Now suppose someone was silly enough to
alter ToGetValue:ToGetValue.  One side effect would be to "invalidate"
the GetValue function -- rendering it inoperative (in the worst possible
way).  Of course one could define invalidation as recompiling-the-source-code.
This still does not totally solve the problem: recall that some GetValue's
occur during the compilation -- look at the GetValue macro, and that 
MarkMacroUse function.  If these calls are interpreted, we're in trouble.
(Of course we might have to compile them, and then insist that at all
times at least one of {it, GetValue} be compiled.  What a hassle...
A simpler solution might be to insist that ToGetValue have its own associated
functions - like KBUpdates, which do special things.  These are just things
to keep you awake late at night.
(By the way, a vaguely similar logic forces us to keep Unitp compiled --
run interpretively it calls a macro, which in turn invokes the FAULTEVAL
function, which (thru RLL's hack to the interpreter) calls Unitp, and so
we go.)

Fortunately, I don't think such updates will be very common; making 
inter-system incompatibilities yet ever rarer.  Just things to think
about.


-----
-----
Other things:
1) I keep getting a BLKAPPLY error during calls to MAPHASHFILE, within
UA-LIST and CompressMe? (and more recently, within UF-COPY).  I've just
REEVAL UA-LIST T (or whatever function) out of it, and continues this
until it runs to completion.  I've no idea what causes it; and may one
day look into it.  Bletch.

2) Is there anyway of making GLOBALVARS statements "permanent"?  
It seems that when I compile UTIL, the compiler has forgotten about
the Global declarations made in CORLL, for example.  Perhaps I need
a LOADCOMP statement, in some DO@COMPILE?  Ideas?

3) I found Doug's code for "quiet" compiling.  Turns out it uses COMPILE1,
plus only a few variables.  I'll send you the code if you're interested.

4) Thanks for BKSYSBUF (or whatever).  CORLLINIT now uses it.

----
Time to go home,
	Russ
-------
-------

∂12-Nov-81  1515	Steve Klein <SKLEIN at USC-ISIB> 	oozing onwards  
∂TO SKLEIN 14:08 14-Nov-81
Slurp, slurp
Steve -
(I intersperced(sp) my suggestions in amongst your questions.)
    Hi.  Waz nu?  Some minor questions... What was your fix to UA-GETPROP so it
    didn't blowup occasionally?  
I didn't change UA-GETPROP.
The bug I removed was from UA-GET -- it's RPLACs are now in
a critical region, where they belong.
Beyond that I don't know why UA-GETPROP blows up.
Nothing in UA-GETPROP does a RPLAC on that unit.
    Still seems to, and effectively consists of a
    LISTGET of a UA-GET, hence what keeps the unit from evaporating between the
    calls?  
I don't understand.  So what if a unit is paged out, the value of UA-GET
should still be that plist...
    Also, in general, what keeps the result of a unit access from 
    evaporating when the unit is paged out if that result is non-atomic?
The RPLAC is on the PList, not on the value of a given slot.  The only funny
case will when there are currently no properties; and I think that is handled
correctly.
    Also, it seems that creating a new user unit doesn't quite work...something
    in the process of initializing the unit decides that the user doesn't exist
    and so starts the process over again.  Of course, saying no to the second
    attempt makes things work (I think), but doesn't look very nice.
Huh?  I need more details... What doesn't work? when, where, ...
I tried creating a new SteveKlein unit, from WhoIsUser; and everything
worked perfectly.
    I would like to make an initial stab at ordering the slots of each unit at
    printout...the first thought that comes to mind is a three-way partition
    of slots into Primitive, Computable, and Syntactic (printed in that order).
    The current problems I see with that are as follows:

      -  not totally satisfactory (but ok for now, unless you see something better)
      -  a bit harsh computationally unless something constructs a (temporary?) 
	   list of each type of slot...bleh.
      -  not exhaustive...for example, the unit FnForGetting  isa
	   AnyInheritableSlot, but not Computable or Primitive...it would seem
	   to me that Computable and Primitive should span all slots: Inheritable,
	   Specializable, and whatever are independent axes.
Why not a mechanism like OrderForToInit, where everything which is a primitive
slot inherits the value (I think) 20, inheritable slots about 50 and computable
slots, 70.  Any particular slot can override this defaulted value by storing
its own value.  Furthermore, if ever you create a new category of slots,
you can assign the default value for those slot's order-for-print by simply
storing that value in TypicalxxxSlot:OrderForPrint, or whatever.

The printer could then order the slots to be presented using these values.
A further embellishment would be to consider any negative value (for example) 
to mean "don't even print me".

    I'll keep on digesting and poking...let me know what you think.
Let me know what happens.

Just about nothing on the NEWs-front --
I'm still macro-ing; and should have this all tested soon.

	Russ